#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int n;
void quickSort(int l,int r){
if(l>=r){
return;
}
int x=a[l];
int i=l,j=r;
while(i!=j){
while(i!=j&&a[j]>x){
j--;
}
a[i]=a[j];
//swap(a[i],a[j]);
while(i!=j&&a[i]<x){
i++;
}
a[j]=a[i];
// swap(a[i],a[j]);
}
a[i]=x;
quickSort(l,i-1);
quickSort(i+1,r);
}
long long res=0;
void mergeSort(int l,int r){
if(l>=r)return;
int mid=(l+r)/2;
mergeSort(l,mid);
mergeSort(mid+1,r);
int i=l,j=mid+1;
int cnt=0;
while(i<=mid&&j<=r){
if(a[i]<=a[j]){
b[cnt++]=a[i++];
}else{
b[cnt++]=a[j++];
res+=mid-i+1;
}
}
while(i<=mid){
b[cnt++]=a[i++];
}
while(j<=r){
b[cnt++]=a[j++];
}
//合并这一步从a数组左下标开始
for(int k=0;k<cnt;k++){
a[l+k]=b[k];
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
mergeSort(0,n-1);
// quickSort(0,n-1);
// for(int i=0;i<n;i++){
// cout<<a[i]<<" ";
// }
cout<<res;
return 0;
}
06-12
4520
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
02-04
2316
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
01-04
1023
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-26
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交