#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int cnt;
void mergesort(int i,int j,int *a,int *b)
{
if(j-i>1)
{
int m=(i+j)/2;
mergesort(i,m,a,b);
mergesort(m,j,a,b);
int p=i,q=m,l=i;
while(p<m||q<j)
{
if(q>=j||(p<m&&a[p]<=a[q])) b[l++]=a[p++];
else { b[l++]=a[q++]; cnt+=m-p;}
}
for(int k=i;k<j;k++)
a[k]=b[k];
}
}
int main ()
{
int a[10]={5,8,7,9,1,2,3,0,6,4};
int b[10];
cnt=0;
mergesort(0,10,a,b);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
cout<<endl<<"cnt="<<cnt;
return 0;
}
#include <cstdio>
#include <cstring>
using namespace std;
int cnt;
void mergesort(int i,int j,int *a,int *b)
{
if(j-i>1)
{
int m=(i+j)/2;
mergesort(i,m,a,b);
mergesort(m,j,a,b);
int p=i,q=m,l=i;
while(p<m||q<j)
{
if(q>=j||(p<m&&a[p]<=a[q])) b[l++]=a[p++];
else { b[l++]=a[q++]; cnt+=m-p;}
}
for(int k=i;k<j;k++)
a[k]=b[k];
}
}
int main ()
{
int a[10]={5,8,7,9,1,2,3,0,6,4};
int b[10];
cnt=0;
mergesort(0,10,a,b);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
cout<<endl<<"cnt="<<cnt;
return 0;
}