10pt求救!
查看原帖
10pt求救!
364876
信息学carryHarry楼主2021/9/21 15:04
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,mod=1e8-3;
long long n,tmp[N],x[N],ans;
struct node{
	int w,id;
}a[N],b[N];
bool cmp(node x,node y){
	return x.w<y.w;
}
void msort(int lt,int rt)
{
	if(lt==rt)
		return ;
	long long mid=(lt+rt)/2;
	msort(1,mid);
	msort(mid+1,rt);
	int i=lt,j=mid+1,p=lt;
	while(i<=mid&&j<=rt){
		if(x[i]<=x[j])
		{
			tmp[p++]=x[i++];
			
		}
		else{
			tmp[p++]=x[j++];
			ans+=(mid-i+1)%mod;
		}
			
	}
	while(i<=mid){
		tmp[p++]=x[i++]; 
	}
	while(j<=rt){
		tmp[p++]=x[j++];
	}
	for(int k=lt;k<=rt;k++){
		x[k]=tmp[k];
	}
	return ;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].w;
		a[i].id=i;
	}
	for(int i=1;i<=n;i++){
		cin>>b[i].w;
		b[i].id=i;
	}
	sort(a+1,a+1+n,cmp);
	sort(b+1,b+1+n,cmp);
	for(int i=1;i<=n;i++){
		x[b[i].id]=a[i].id;
	}
	msort(1,n);
	cout<<ans%mod;
	return 0;
}

2021/9/21 15:04
加载中...