题目:788. 逆序对的数量 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e5+10; const int mod=100000007; int a[N],n; LL sum=0; void merge_sort(int l,int r){ if(l>=r) return; int mid=l+r>>1; merge_sort(l,mid); merge_sort(mid+1,r); int t[N],k=0; int i=l,j=mid+1; while(i<=mid&&j<=r){ if(a[i]<=a[j]) t[k++]=a[i++]; else{ sum+=mid-i+1; t[k++]=a[j++]; } } while(i<=mid) t[k++]=a[i++]; while(j<=r) t[k++]=a[j++]; for(int i=0;i<k;i++){ a[l+i]=t[i]; } } int main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; merge_sort(0,n-1); printf("%lld",sum); return 0; }