记录编号 |
269007 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[尼伯龙根之歌] 精灵魔法 |
最终得分 |
100 |
用户昵称 |
NewBee |
是否通过 |
通过 |
代码语言 |
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);
}