http://poj.org/problem?id=2299
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define MAXN 500100 5 using namespace std; 6 long long A[MAXN],T[MAXN]; 7 long long cnt; 8 int n; 9 void merge_sort(long long* A,int x,int y,long long * T) 10 { 11 if(y-x>1) 12 { 13 int m=x+(y-x)/2; 14 int p=x,q=m,i=x; 15 merge_sort(A,x,m,T); 16 merge_sort(A,m,y,T); 17 while(p<m||q<y) 18 { 19 if(q>=y||(p<m&&A[p]<=A[q])) T[i++]=A[p++]; 20 else 21 { 22 T[i++]=A[q++]; 23 cnt+=m-p; 24 } 25 } 26 for(i=x;i<y;i++) A[i]=T[i]; 27 } 28 } 29 int main() 30 { 31 while(scanf("%d",&n)&&n){ 32 33 cnt=0; 34 for(int i=0;i<n;i++) 35 { 36 scanf("%lld",&A[i]); 37 } 38 merge_sort(A,0,n,T); 39 printf("%lld ",cnt); 40 } 41 return 0; 42 }