记录编号 |
268615 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[尼伯龙根之歌] 精灵魔法 |
最终得分 |
100 |
用户昵称 |
面对疾风吧 疾风 疾风吧 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.181 s |
提交时间 |
2016-06-12 16:48:27 |
内存使用 |
1.29 MiB |
显示代码纯文本
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
struct Node{
int pos,v,nv;
};
Node h[maxn];
int n,c[maxn];
long long sum;
void _insert(int);
long long _query(int);
int _lowbit(int);
bool comp1(const Node &a,const Node &b){
return a.v<b.v;
}
bool comp2(const Node &a,const Node &b){
return a.pos>b.pos;
}
int Main();
int haha=Main();
int main(){;}
int Main(){
freopen("alfheim.in","r",stdin);
freopen("alfheim.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&h[i].pos);
}
for(int i=1;i<=n;i++){
scanf("%d",&h[i].v);
}
sort(h+1,h+n+1,comp1);
int cnt=0;
for(int i=1;i<=n;i++){
if(i==1){
cnt++;h[i].nv=cnt;
continue;
}
if(h[i].v!=h[i-1].v){
cnt++;h[i].nv=cnt;
}
else{
h[i].nv=cnt;
}
}
sort(h+1,h+n+1,comp2);
for(int i=1;i<=n;i++){
_insert(h[i].nv);
long long tmp=_query(h[i].nv-1);
sum+=tmp;
}
printf("%lld\n",sum);
}
void _insert(int x){
for(int i=x;i<=maxn;i+=_lowbit(i))c[i]+=1;
}
int _lowbit(int x){
return x&-x;
}
long long _query(int x){
long long temp=0;
for(int i=x;i>0;i-=_lowbit(i))temp+=c[i];
return temp;
}