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