2011-04-21 22:00:06 #include<iostream> using namespace std; int a[2]={0,0},b[100000],c[100000]; void merge(int *p1,int *p2,int s,int t,int u) { int x=s,y,k=s,mid=(s+t)/2,c=0; y=mid+1; while (x<=mid&&y<=t) { if(p1[x]>p1[y]) { p2[k++]=p1[y++]; c++; } else { p2[k++]=p1[x++]; a[u]+=c; } } while (y<=t) { p2[k++]=p1[y++]; } while (x<=mid) { p2[k++]=p1[x++]; a[u]+=c; } } void insertSort(int *p1,int *p2,int s,int t) { int i,j; p2[s]=p1[s]; for(i=s+1;i<=t;i++) { j=i-1; while (p1[i]<p2[j]&&j>=s) { p2[j+1]=p2[j]; j--; } p2[j+1]=p1[i]; } } void mergeSort(int *p1,int *p2,int s,int t,int u) { int mid=(s+t)/2; if(t-s<2) { insertSort(p1,p2,s,t); } else { mergeSort(p2,p1,s,mid,1-u); mergeSort(p2,p1,mid+1,t,1-u); merge(p1,p2,s,t,u); } } int main() { int n,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",b+i); c[i]=b[i]; } mergeSort(c,b,0,n-1,0); printf("%d %d/n",a[0],a[1]); return 0; }