这题用map咋超时了呢。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int n;
long long ans;
int a[maxn],b[maxn],x[maxn],y[maxn],c[maxn],t[maxn];
map<pair<int,int>,int>mp;
void add(int x){for (;x<=n;x+=x&-x)t[x]++;}
int sum(int x){int sum=0;for (;x;x-=x&-x)sum+=t[x];return sum;}
int query(int l,int r){return sum(r)-sum(l-1);}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)scanf("%d",&a[i]);
for (int i=1;i<=n;i++)scanf("%d",&b[i]);
for (int i=1;i<=n;i++)scanf("%d",&x[i]);
for (int i=1;i<=n;i++)scanf("%d",&y[i]);
for (int i=1;i<=n;i++)mp[make_pair(x[i],y[i])]=i;
bool flag=1;
for (int i=1;i<=n;i++){
if (flag==0)break;
bool e=0;
if (mp[make_pair(a[i],b[i])]){
if ((mp[make_pair(a[i],b[i])]-i)%2)flag=0;
c[i]=mp[make_pair(a[i],b[i])];
e=1;
}
if (mp[make_pair(b[i],a[i])]){
if ((mp[make_pair(b[i],a[i])]-i)%2==0)flag=0;
c[i]=mp[make_pair(b[i],a[i])];
e=1;
}
if (e==0)flag=0;
}
if (!flag)return puts("dldsgay!!1"),0;
for (int i=1;i<=n;i++){
add(c[i]);
ans+=query(c[i]+1,n);
}
printf("%lld",ans);
return 0;
}