记录编号 82206 评测结果 AAAAAAAAAA
题目名称 [NOIP 2013]火柴排队 最终得分 100
用户昵称 Gravatardigital-T 是否通过 通过
代码语言 C++ 运行时间 0.148 s
提交时间 2013-11-22 13:32:55 内存使用 3.34 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int INF=99999997;
int N,tot;
pair<long long,int> a[100001],b[100001];
int c[100001],d[100001];
bool op(pair<long long,int> x,pair<long long,int> y){return x.first<y.first;}
void msort(int l,int r)
{
	if(l>=r)return;
	int mid=(l+r)/2;
	msort(l,mid);
	msort(mid+1,r);
	int p1=l,p2=mid+1;
	for(int i=l;i<=r;i++)
	{
		if(p2>r||(p1<=mid&&c[p1]<=c[p2]))
		{	
			d[i]=c[p1];
			p1++;	
		}
		else//找到逆序
		{	
			d[i]=c[p2];
			p2++;
			tot+=(mid-p1+1);
			tot%=INF;
		}
	}
	for(int i=l;i<=r;i++)c[i]=d[i];
}
int main()
{
	freopen("MatchNOIP2013.in","r",stdin);
	freopen("MatchNOIP2013.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&a[i].first);
		a[i].second=i;
	}
	for(int j=1;j<=N;j++)
	{
		scanf("%d",&b[j].first);
		b[j].second=j;
	}
	sort(a+1,a+N+1,op);
	sort(b+1,b+N+1,op);
	for(int i=1;i<=N;i++)
		c[a[i].second]=b[i].second;
	tot=0;
	msort(1,N);
	printf("%d\n",tot);
	return 0;
}