#include<iostream>
using namespace std;
static int nums=0;
bool Merge(int *list,int left,int mid,int right)
{
int i=left;
int j=mid+1;
int k=0;
int *num=new int[right-left+1];
if(!num)
return false;
while((i<=mid)&&(j<=right))
{
if(list[i]<list[j])
{
num[k++]=list[i++];
}
else
{
num[k++]=list[j++];
nums+=mid-i+1;
}
}
while(i<=mid)
num[k++]=list[i++];
while(j<=right)
num[k++]=list[j++];
for(int s=left,p=0;s<=right;s++,p++)
list[s]=num[p];
delete []num;
}
void MergePart(int *list,int left,int right)
{
int mid=0;
if(left<right)
{
mid=(left+right)/2;
MergePart(list,left,mid);
MergePart(list,mid+1,right);
Merge(list,left,mid,right);
}
}
int main(int argc,char *argv)
{
int list[5]={2,3,8,6,1};
int low=0,high=4;
MergePart(list,low,high);
for(int i=0;i<=high;i++)
cout<<list[i]<<" ";
cout<<endl<<nums<<endl;
cout<<endl;
}