Problem:
Score : 1200 points

Problem Statement

You are given a permutation of 1,2,...,N: p_1,p_2,...,p_N. Determine if the state where p_i=i for every i can be reached by performing the following operation any number of times:

Choose three elements p_{i-1},p_{i},p_{i+1} (2\leq i\leq N-1) such that p_{i-1}>p_{i}>p_{i+1} and reverse the order of these three.

Constraints

3 \leq N \leq 3 × 10^5

p_1,p_2,...,p_N is a permutation of 1,2,...,N.

Input

Input is given from Standard Input in the following format:

N
p_1
:
p_N

Output

If the state where p_i=i for every i can be reached by performing the operation, print Yes; otherwise, print No.

Sample Input 1

5
5
2
1
4
3

Sample Output 1

Yes

The state where p_i=i for every i can be reached as follows:

Reverse the order of p_1,p_2,p_3. The sequence p becomes 1,2,5,4,3.

Reverse the order of p_3,p_4,p_5. The sequence p becomes 1,2,3,4,5.

Sample Input 2

4
3
2
4
1

Sample Output 2

No

Sample Input 3

7
3
2
1
6
5
4
7

Sample Output 3

Yes

Sample Input 4

6
5
3
4
1
2
6

Sample Output 4

No

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

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=3e5+10;
int bit[M],n;
inline int lowbit(int a){return (a&(-a));}
void add(int a,int b){
	for(;a<=n;a+=lowbit(a))bit[a]+=b;
}
int query(int a){
	int ans=0;
	for(;a;a-=lowbit(a))ans+=bit[a];
	return ans;
}
int A[M],flag,cnt;
long long ans;
int main(){
//	freopen("data.in","r",stdin);
//	freopen("you.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&A[i]);
	for(int i=1;i<=n;i++){
		if(A[i]>A[i-1]){
			++cnt;if(A[i]!=i)flag=1;
		}else{
			cnt=1;
			if(A[i]!=i) flag=1;
			else flag=0;
		}
		if(cnt>4&&flag){
			puts("No");
			return 0;
		}
	}
	cnt=0;
	for(int i=n;i>=1;i--){
		if(A[i]!=i)++cnt;
		int now=query(A[i]);
		ans+=now;
		if((A[i]-i)&1) {puts("No");return 0;}
		add(A[i],1);
	}
//	printf("%lld %d\n",ans,cnt);
	if(ans<cnt||ans%3) puts("No");
	else puts("Yes");
	return 0;
}