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 <bits/stdc++.h>
#define MOD 998244353

using namespace std;

int p[300005];
int pos[300005];
int main(){
    int n;cin >> n;
    for(int i=1;i<=n;++i){
        scanf("%d",&p[i]);
        pos[p[i]]=i;
    }
    bool flag=0;
    for(int i=1;i<=n;++i){
        if(abs(i-p[i])%2){
            flag=1;break;
        }
    }
    if(flag){
        cout << "No" << endl;return 0;
    }

    for(int j=n;j>0;--j){
        int ind=pos[j];
        if(ind>j){
            cout << "No" << endl;return 0;
        }
        for(int i=ind+1;i<=j;i+=2){
            if(p[i]<p[i+1]){
                cout << "No" << endl;return 0;
            }
            pos[p[i]]=i;pos[p[i+1]]=i-1;
            p[i-1]=p[i+1];
            p[i+1]=j;
           

        }
        j=ind+1;
        

    }
    for(int i=1;i<=n;++i){
        if(p[i]!=i){
            cout << "No" << endl;return 0;
        }
    }
    cout << "Yes" << endl;




    return 0;
}