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