其他分享
首页 > 其他分享> > 788. 逆序对的数量

788. 逆序对的数量

作者:互联网

逆序对
1.左半边内部的逆序对数量
2.右半边内部的逆序对数量
3.中间的逆序对

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N =1e5+7;
int arr[N], tmp[N];
LL mergesort(int l, int r){
	if(l >= r) return 0;
	int mid = l + r >> 1;
	LL res = mergesort(l, mid) + mergesort(mid+1, r);
	int k = 0, i = l, j = mid + 1;
	while(i <= mid && j <= r){
		if(arr[i] <= arr[j]) tmp[k++] = arr[i++];
		else{
		    tmp[k++] = arr[j++];
		    res += mid - i + 1;
		}
	}
	while(i <= mid) tmp[k++] = arr[i++];
	while(j <= r) tmp[k++] = arr[j++];
	
	for(int i = l, j = 0; i <= r; i++, j++){
		arr[i] = tmp[j];
	}
	return res;
}
int main(){
	int n;
	scanf("%d", &n);
	for(int i = 0;i < n; i++){
		scanf("%d", &arr[i]);
	}
	cout<<mergesort(0, n-1)<<endl;

	return 0;
}

标签:mergesort,int,LL,788,mid,include,数量,逆序
来源: https://blog.csdn.net/SYaoJun/article/details/100555026