【moban】归并排序逆序对
事实证明树状数组求逆序对的限制很大,还是必须老老实实手写排序来搞sto sto orz orz
int merge_sort1(int *s1,int *s2,int l,int mid,int r)
{
int i=l,j=mid+1,k=l; int sum=0;
while(i<=mid&&j<=r)
{
if(s1[i]>s1[j]) { s2[k++]=s1[j++]; sum += mid-i+1; }
else // s1[i]<=s1[j]
s2[k++]=s1[i++];
}
while(i<=mid) s2[k++]=s1[i++];
while(j<=r) s2[k++]=s1[j++];
for(int i=l;i<=r;i++) s1[i]=s2[i];
return sum;
}
int merge1(int *s1,int *s2,int l,int r)
{
int sum = 0 ;
if(l<r)
{
int mid = (l+r)>>1;
sum+=merge1(s1,s2,l,mid);
sum+=merge1(s1,s2,mid+1,r);
sum+=merge_sort1(s1,s2,l,mid,r);
}
return sum;
}
别的什么情况要排序还是老老实实用STLsort和stable_sort吧