#include<cstdio>
#include<algorithm>
using namespace std;
long long n,f[100001],s[100001],ans;
void msort(int x,int y){
if(x==y) return;
int m=(x+y)/2,i=x,j=m+1,k=x;
msort(x,m);
msort(j,y);
while(i<=m&&j<=y){
if(f[i]<=f[j]) s[k++]=f[i++];
else s[k++]=f[j++],ans+=m-i+1;
}
while(i<=m) s[k++]=f[i++];
while(j<=y) s[k++]=f[j++];
for(int i=x;i<=y;i++) f[i]=s[i];
}
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&f[i]);
msort(1,n);
printf("%lld",ans);
}
排列的逆序数
最新推荐文章于 2020-03-28 16:39:17 发布