题解
2023-09-09 08:26:23
发布于:广东
16阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int Max=100105;
const int mod=99999997;
struct px{int bh,num;};
px a[Max],b[Max];
long long c[Max],r[Max];
long long n,sum;
int get_int()
{
int x=0,f=1;
char c;
for(c=getchar();(c<'0'||c>'9')&&(c!='-');c=getchar());
if(c=='-') {f=-1; c=getchar();}
for(;c>='0'&&c<='9';c=getchar()) x=(x<<3)+(x<<1)+c-'0';
return x*f;
}
bool comp(const px &a,const px &b)
{
return a.num<b.num;
}
void merge(int s,int mid,int t)
{
int i=s,k=s,j=mid+1;
while(i<=mid&&j<=t)
{
if(c[i]>c[j])
{
r[k++]=c[j++];
sum+=mid-i+1;
}
else r[k++]=c[i++];
}
while(i<=mid) r[k++]=c[i++];
while(j<=t) r[k++]=c[j++];
for(int x=s;x<=t;x++) c[x]=r[x];
}
void mergesort(int s,int t)
{
if(s<t)
{
int mid=(s+t)/2;
mergesort(s,mid);
mergesort(mid+1,t);
merge(s,mid,t);
}
}
int main()
{
n=get_int();
for(int i=1;i<=n;i++)
{
a[i].num=get_int();
a[i].bh=i;
}
for(int i=1;i<=n;i++)
{
b[i].num=get_int();
b[i].bh=i;
}
sort(a+1,a+n+1,comp);
sort(b+1,b+n+1,comp);
for(int i=1;i<=n;i++) c[b[i].bh]=a[i].bh;
mergesort(1,n);
cout<<sum%mod<<endl;
return 0;
}
这里空空如也
有帮助,赞一个