#include"stdio.h" #include"string.h" long long sum; int gs; long long a[101000],b[101000];//a是存放结果 b是存放暂时结果 int Merge(long long r[],long long r1[],int s,int m,int t) { int i=s; int j=m+1; int k=s; while(i<=m&&j<=t)//规定它的范围 { if(r[i]<=r[j]) { r1[k++]=r[i++]; } else { r1[k++]=r[j++]; }
} while(i<=m)//如果有个列表的成员有多就把剩下的全部放进去 r1[k++]=r[i++]; while(j<=t)//同理 r1[k++]=r[j++]; for(int l=s; l r[l]=r1[l]; }
void MergeSort(long long r[],long long r1[],int s,int t) { if(s==t) //只有一个成员时停止 return; else { int m=(s+t)/2; MergeSort(r,r1,s,m); MergeSort(r,r1,m+1,t);//一直调用自己 一直分 Merge(r,r1,s,m,t); } } main() { int n,i; while(scanf("%d",&n)!=EOF) { while(n--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); while(scanf("%d",&gs)!=EOF) { int qw; for(qw=0;qw scanf("%lld",a+qw); MergeSort(a,b,0,gs-1); for(i=0;i printf("%d ",a[i]) ; printf("\n"); } }
#include"stdio.h" #include"string.h" long long sum; int gs; long long a[101000],b[101000]; int Merge(long long r[],long long r1[],int s,int m,int t) { int i=s; int j=m+1; int k=s; while(i<=m&&j<=t) { if(r[i]<=r[j]) { r1[k++]=r[i++]; } else { r1[k++]=r[j++]; sum+=m-i+1; }
} while(i<=m) r1[k++]=r[i++]; while(j<=t) r1[k++]=r[j++]; for(int l=s; l r[l]=r1[l]; }
void MergeSort(long long r[],long long r1[],int s,int t) { if(s==t) return; else { int m=(s+t)/2; MergeSort(r,r1,s,m); MergeSort(r,r1,m+1,t); Merge(r,r1,s,m,t); } } main() { int n,i; while(scanf("%d",&n)!=EOF) { while(n--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); while(scanf("%d",&gs)!=EOF) { sum=0; int qw; for(qw=0;qw scanf("%lld",a+qw); MergeSort(a,b,0,gs-1); printf("%lld\n",sum); } }