关于map常数
查看原帖
关于map常数
32379
Dickk楼主2020/7/27 10:05

这题用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;
}
2020/7/27 10:05
加载中...