题解:本题主要考查归并排序,裸题(注意开longlong)。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
long long n,ans=0;
int a[2345045],b[4023423];
void msort(int l,int r)
{
if(l==r)return ;
int mid=l+r>>1;
int i=l;int j=mid+1;int k=l;
msort(l,mid);msort(mid+1,r);
while(i<=mid&&j<=r)
if(a[i]<=a[j])b[k++]=a[i++];
else
{
b[k++]=a[j++];
ans+=mid-i+1;
}
while(i<=mid)b[k++]=a[i++];
while(j<=r)b[k++]=a[j++];
for(int q=l;q<=r;q++)a[q]=b[q];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
msort(1,n);
cout<<ans;
cin>>n;
return 0;
}