记录编号 269007 评测结果 AAAAAAAAAA
题目名称 [尼伯龙根之歌] 精灵魔法 最终得分 100
用户昵称 GravatarNewBee 是否通过 通过
代码语言 C++ 运行时间 0.311 s
提交时间 2016-06-13 06:14:49 内存使用 3.34 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("alfheim.in","r",stdin);freopen("alfheim.out","w",stdout);chul();Cu
using namespace std;
//designed by New_Beeؼ 
const int maxn=200010;
struct op{
	int pa,pac,plac;
	op(){
		pa=pac=plac;
	}
};
op g[maxn];
int a[maxn];
int n;
int lowbit(int);
bool comp1(op,op);
bool comp2(op,op);
void adds(int);
long long sum(int);
void chul();
int main(){
	Begin
}
void chul(){
	long long ans=0;scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&g[i].plac);
	}
	for(int i=1;i<=n;i++){
		scanf("%d",&g[i].pa);
	}
	sort(g+1,g+1+n,comp1);
	for(int i=1;i<=n;i++){
		if(g[i].pa==g[i-1].pa){
			g[i].pac=g[i-1].pac;
		}
		else g[i].pac=i;
	}
	sort(g+1,g+1+n,comp2);
	for(int i=1;i<=n;i++){
		ans+=sum(g[i].pac-1);
		adds(g[i].pac);
	}
	printf("%lld",ans);
}
bool comp1(op a,op b){
	return a.pa<b.pa;
}
bool comp2(op a,op b){
	return a.plac>b.plac;
}
long long sum(int x){
	int tot=0;
	while(x>0){
		tot+=a[x];
		x-=lowbit(x);
	}
	return (long long)tot;
}
void adds(int x){
	while(x<=n){
		a[x]++;
		x+=lowbit(x);
	}
}
int lowbit(int x){
	return x&(-x);
}