【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吧

posted @ 2018-05-26 19:54  Newuser233  阅读(7)  评论(0)    收藏  举报