欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

归并求逆序对【模板】

程序员文章站 2022-03-03 07:50:36
...
const int maxn = 5e5 + 10;
int arr[maxn];
int tmp[maxn];
ll merge(int l,int r)
{
	if(l == r) return 0;
	ll ans=0;
	int mid = l + r >> 1;
	ans+=merge(l,mid),ans+=merge(mid+1,r);
	int i = l,j = mid + 1,k=l;
	while(i<=mid && j<=r){
		if(arr[i]<=arr[j]){
			tmp[k++]=arr[i++];
		}
		else{
			tmp[k++]=arr[j++],ans+=mid-i+1;
		}
	}
	while(i<=mid) tmp[k++]=arr[i++];
	while(j<=r) tmp[k++]=arr[j++];
	for(i=l;i<=r;i++){
		arr[i]=tmp[i];
	}
	return ans;
}