POJ 2299

来源:互联网 发布:一线建材品牌 知乎 编辑:程序博客网 时间:2024/05/22 08:21

http://poj.org/problem?id=2299

刘汝佳经典归并排序求逆序:

#include<stdio.h>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>using namespace std;#define maxn 500005long long cnt=0;long long a[maxn],T[maxn];void merge_sort(long long *A,long long x,long long y,long long *T){    if(y-x>1)    {       long long m=x+(y-x)/2;       long long p=x,q=m,i=x;       merge_sort(A,x,m,T);       merge_sort(A,m,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++];            cnt += m-p;           }       }       for(i=x;i<y;++i) A[i]=T[i];    }}int main(){    long long n;    while(cin>>n&&n)    {        for(long long i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        cnt=0;        merge_sort(a,0,n,T);        cout<<cnt<<endl;    }}
0 0
原创粉丝点击