归并排序求逆序数

来源:互联网 发布:mac层和物理层区别 编辑:程序博客网 时间:2024/06/04 18:34
#include <cstdio>using namespace std;int A[500008],AA[500008];long long int sum;void  merge_sort(int *A,int x,int y,int *T){if(y-x>=1){int m=x+(y-x)/2;int p=x,q=m+1,i=x;merge_sort(A,x,m,T);merge_sort(A,m+1,y,T);while(p<=m||q<=y){if(q>y||(p<=m&&A[p]<=A[q])){T[i++]=A[p++];}else{T[i++]=A[q++];sum+=q-i;}}for(int i=x;i<=y;i++){A[i]=T[i];}}}int main(){int n;while(scanf("%d",&n)!=EOF&&n){sum=0;for(int i=1;i<=n;i++){scanf("%d",&A[i]);}merge_sort(A,1,n,AA);printf("%lld\n",sum);}return 0;}

0 0
原创粉丝点击