wjj255 @ 2022-07-21 18:03:45
#include<iostream>
using namespace std;
const int N=500005;
long long a[N],b[N],s;
void msort(int l,int r)
{
if(l==r)return;
long long mid=(l+r)/2;
msort(l,mid);
msort(mid+1,r);
int i=l;int j=mid+1;int k=l;
while(k<=r){
if(j>r||i<=mid&&a[i]<a[j]){
b[k++]=a[i++];
}
else{
b[k++]=a[j++];
s+=(long long)(mid-i+1);
}
}
for(int i=l;i<=r;i++)a[i]=b[i];
}
int main()
{
ios::sync_with_stdio(false);
//freopen("P1908.in","r",stdin);
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
msort(1,n);
/*for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}*/
cout<<s<<endl;
return 0;
}
上述代码只有30分,但只要把
if(j>r||i<=mid&&a[i]<a[j])
改成
if(j>r||i<=mid&&a[i]<=a[j]){
就可以满分
by tottopoi @ 2022-07-26 09:10:14
区别就是第一种把相同的数字也当成了逆序数
by CultReborn @ 2022-07-28 15:52:44
%%%%%%%%%%%%%%%%%%%%%%%%