题目:P1908 逆序对
请求大佬指导
代码如下(只有30分):
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int a[N],b[N];
long long sum=0;
void fun(int l,int r){
if(l==r){
return;
}
int mid=(l+r)/2;
fun(l,mid);
fun(mid+1,r);
int l1=l,r1=mid;
int l2=mid+1,r2=r;
int cnt=l;
while(l1<=r1&&l2<=r2){
if(a[l1]<a[l2]){
b[cnt++]=a[l1++];
}else{
b[cnt++]=a[l2++];
sum+=mid-l1+1;
}
}
while(l1<=r1){
b[cnt++]=a[l1++];
}
while(l2<=r2){
b[cnt++]=a[l2++];
}
for(int i=l;i<=r;i++){
a[i]=b[i];
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
fun(1,n);
cout<<sum;
return 0;
}