60分求助
查看原帖
60分求助
916472
YJZWX楼主2023/12/6 12:56
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+15; 
int ans=0;
struct sb{
	int data;
	int id;
};
sb a[N],b[N];
int x[N],c[N];
bool cmp(sb x,sb y)
{
	return x.data<y.data;
}
void cnm(int zb,int yb)
{
	if(zb==yb) return;
	int mid=(zb+yb)/2,i=zb,j=mid+1,flag=zb;
	cnm(zb,mid);
	cnm(mid+1,yb);
    while(i<=mid&&j<=yb)
    {
    	if(x[i]<=x[j])
    		c[flag++]=x[i++];
    	else
    	{
    		c[flag++]=x[j++];
			ans+=(mid-i+1)%N;
		}
	}
    while(i<=mid) c[flag++]=x[i++];
    while(j<=yb) c[flag++]=x[j++];
    for(int p=zb;p<=yb;p++) x[p]=c[p];
}
signed main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].data;
		a[i].id=i;
	}
	for(int i=1;i<=n;i++)
	{
	    cin>>b[i].data;
		b[i].id=i;
	}
	sort(a+1,a+n+1,cmp);
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=n;i++)
		x[b[i].id]=a[i].id;
	cnm(1,n);
    printf("%lld",ans%N);
}
2023/12/6 12:56
加载中...