Problem:
Score : 600 points

Problem Statement

Snuke got an integer sequence of length N from his mother, as a birthday present. The i-th (1 ≦ i ≦ N) element of the sequence is a_i. The elements are pairwise distinct.
He is sorting this sequence in increasing order.
With supernatural power, he can perform the following two operations on the sequence in any order:

Operation 1: choose 2 consecutive elements, then reverse the order of those elements.

Operation 2: choose 3 consecutive elements, then reverse the order of those elements.

Snuke likes Operation 2, but not Operation 1. Find the minimum number of Operation 1 that he has to perform in order to sort the sequence in increasing order.

Constraints

1 ≦ N ≦ 10^5

0 ≦ A_i ≦ 10^9

If i ≠ j, then A_i ≠ A_j.

All input values are integers.

Input

The input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the minimum number of times Operation 1 that Snuke has to perform.

Sample Input 1

4
2
4
3
1

Sample Output 1

1

The given sequence can be sorted as follows:

First, reverse the order of the last three elements. The sequence is now: 2,1,3,4.

Then, reverse the order of the first two elements. The sequence is now: 1,2,3,4.

In this sequence of operations, Operation 1 is performed once. It is not possible to sort the sequence with less number of Operation 1, thus the answer is 1.

Sample Input 2

5
10
8
5
3
2

Sample Output 2

0

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
#define rep(i,n) for(int i=0, i##_len=(int)(n); i<i##_len; i++)
#define reps(i,n) for(int i=1 , i##_len=(int)(n);i<=i##_len;i++)
#define rrep(i,n) for(int i=((int)(n)-1);i>=0;i--)
#define rreps(i,n) for(int i=((int)(n));i>0;i--)
#define repi(i,x) for(auto i=(x).begin(),i##_fin=(x).end();i!=i##_fin;i++)
#define all(x) (x).begin(), (x).end()
#define F first
#define S second
#define mp make_pair
#define pb push_back
#define solve(a) ((a)?"Yes":"No")
typedef vector<int> Vi;
typedef vector<Vi> VVi;
typedef pair<int , int> Pi;
typedef vector<Pi> VPi;
typedef vector<long long> V;
typedef vector<V> VV;
typedef pair<long long , long long> P;
typedef vector<P> VP;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1;} return 0;}
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1;} return 0;}
const long long INFLL = 1LL<<60;
const int INF = 1<<30;
const double PI=acos(-1);

int main(){
	int n;
	int ans=0;
	cin >>n;
	Vi a(n);
	Vi o, e;
	rep(i,n){
		cin>>a[i];
		if(i%2){
			e.pb(a[i]);
		}else{
			o.pb(a[i]);
		}
	}
	if(n==1){
		cout<<0<<endl;
		return 0;
	}else if(n==2 or n==3){
		sort(all(a));
		if(e[0]==a[1]){
			cout<<0<<endl;
		}else{
			cout<<1<<endl;
		}
		return 0;
	}
	sort(all(a));
	sort(all(e));
	repi(i,e){
		clog<<*i<<" ";
	}
	clog<<endl;
	auto ter=e.begin();
	for(int i=0;i<(n-1)/2;i++){
		clog<<a[1+i*2]<<endl;
		ter = lower_bound(all(e), a[1+i * 2]);
		if(ter==e.end()){
			ans++;
		}else if(a[1+i * 2] !=( *ter)){
			ans++;
		}
	}
	cout<<ans<<endl;
}
/*
5 4 3 2 1
3 4 5 2 1
3 4 1 2 5
3 2 1 4 5
1 2 3 4 5

2 4 3 1
2 1 3 4

2 3 1
1 3 2 -> 1

6 5 4 3 2 1
6 4 2
5 3 1
1 2 3 4 5 6
2 1 4 3 6 5
4 1 2 5 6 3
4 1 6 5 2 3
6 1 4 5 2 3
6 5 4 1 2 3

1 5 3 4 2 6
1 5 2 4 3 6
1 4 2 5 3 6
1 4 5 2 3 6
1 2 5 4 3 6
11 2 3 4 5
1 6 3 4 5 2
1 4 3 6 5 2
1 4 3 2 5 6
1 2 3 4
*/