Language: C++

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>//sort,reverse
#include<utility>//pair
#include<queue>//queue,priority_queue
#include<deque>//double_ended queue
using namespace std;
typedef pair<int,int> P;//Pでpair<-,->を表す。
typedef long long LL; 

int main()
{ 
    int n;
    cin>>n;
    int a[n];
    int b[n];
    int ans=-1;
    int max=-1;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        cin>>b[i];
    }
    int check[n];
    int flag=0;
    for(int i=0;i<n;i++){
        check[i]=0;
    }
    int pow[n+1];
    for(int i=0;i<=n;i++){
        if(i==0){pow[i]=1;}
        else{pow[i]=2*pow[i-1];}
    }
    for(int i=0;i<pow[n];i++){
        //まず列を作る
        P p[n];
        for(int j=0;j<n;j++){
            p[j].second=j;
            if(check[j]==0){p[j].first=a[j];}
            else{p[j].first=b[j];}
        }
        sort(p,p+n);

        //可能かどうかの判定をします。
        int memory=0;
        int start=0;
        int counter1=0;
        int counter2=0;
        int flg=1;

        for(int j=0;j<n;j++){//下からたどる。
            if(memory!=p[j].first){
                //ansの計算
                if(counter1!=counter2){flg=0;}
                int c=0;
                int d=0;
                P q;
                for(int k=start;k<j;k++){
                    if(c==0&&(p[j].second+j+check[j])%2!=0){q=p[k]d=k;c=1;}
                    if(c==1&&(p[j].second+j+check[j])%2!=0){p[d]=p[k];p[k]=q;c=0;}    
                }
                //次の作業
                start=j;
                memory=p[j].first;
                counter1=0;
                counter2=0;
                if((p[j].second+j+check[j])%2!=0){counter1++;}
            }
            else{
                if((p[j].second+j+check[j])%2!=0){
                    if((j-start)%2==0){counter1++;}
                    else{counter2++;}
                }
            }
        }
        //最後にもう一度ansの計算
        if(counter1!=counter2){flg=0;}
        int c=0;
        int d=0;
        P q;
        for(int k=start;k<j;k++){
            if(c==0&&(p[j].second+j+check[j])%2!=0){q=p[k]d=k;c=1;}
            if(c==1&&(p[j].second+j+check[j])%2!=0){p[d]=p[k];p[k]=q;c=0;}    
        }

        if(flg==1){
            for(int j=0;j<n;j++){
                int x=p[j].second-j;
                if(x<0){x=-x;}
                ans=ans+x;
            }
            ans=ans/2;
            if(max<ans){max=ans;}
        }
        //1足す作業
        check[0]++;
        flag=0;
        for(int j=0;j<n-1;j++){
            if(check[j]==2){check[j]=0;flag=1;}
            else{flag=0;}
            check[j+1]=check[j+1]+flag;
        }
    }

    cout<<max<<endl;
    return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:61:67: error: expected ';' before 'd'
   61 |                     if(c==0&&(p[j].second+j+check[j])%2!=0){q=p[k]d=k;c=1;}
      |                                                                   ^
      |                                                                   ;
a.cc:83:27: error: 'j' was not declared in this scope
   83 |         for(int k=start;k<j;k++){
      |                           ^
a.cc:84:59: error: expected ';' before 'd'
   84 |             if(c==0&&(p[j].second+j+check[j])%2!=0){q=p[k]d=k;c=1;}
      |                                                           ^
      |                                                           ;