模板 归并排序求逆序对
程序员文章站
2022-05-10 15:13:31
...
#include <stdio.h>
const int tt=500100;
int n,m,a[500100],b[500100];
long long ans;
void mergesort(int x,int y) {
int k1,k2,k3,i,j,m;
if(x==y) return;
m=(x+y)/2; //b[]
mergesort(x,m);
mergesort(m+1,y);
k1=x; k2=m+1; k3=x;
while(k1<=m&&k2<=y) {
if(a[k1]<=a[k2]) {
b[k3]=a[k1];
k3++; k1++;
}
else {
b[k3]=a[k2];
k2++; k3++;
ans=ans+m-k1+1;
}
}
while(k1<=m) {
b[k3]=a[k1];
k3++; k1++;
}
while(k2<=y) {
b[k3]=a[k2];
k2++; k3++;
}
for(i=x;i<=y;i++) a[i]=b[i];
}
int main()
{
int i,j;
scanf("%d", &n);
for(i=1;i<=n;i++) scanf("%d", &a[i]);
mergesort(1, n);
printf("%lld", ans);
return 0;
}
上一篇: PHP导出excel时科学计数法的处置
下一篇: $('')是什么意思、解决思路