感觉写的很不错的板子
void sort(int *s,int l,int r)
{
if(l==r) return; //区间长度为1时返回
int mid = l+r>>1; //对左右区间进行排序
sort(s,l,mid);
sort(s,mid+1,r);
int a[mid-l+1],b[r-mid],l1,l2,i,j,k; //复制左右区间
l1 = 0;l2 = 0;k = l;
for(i = l;i <= mid;i ++) a[++l1] = s[i];
for(i = mid+1;i <= r;i ++) b[++l2] = s[i];
i = 1;j = 1; //合并放入原数组
while(i<=l1&&j<=l2)
{
if(a[i]<=b[j]) s[k++] = a[i++];
else
{
s[k++] = b[j++];
ans+=(l1-i+1);
}
}
while(i<=l1) s[k++] = a[i++];
while(j<=l2) s[k++] = b[j++];
}