求逆序对数量
第一次接触这类是在洛谷的试炼场里
https://www.luogu.org/problemnew/show/P1908
放当时打的模板
#include<bits/stdc++.h>
using namespace std;
int result[500000],arr[500000];
long long ans=0;//存逆序对 //感觉这个模板的变量名都太长了 到时候不好打。。。
void merge(int *data,int start,int end,int *result){
//归并函数
int left_length=(end-start+1)/2+1; //但是名字意思好懂,left_length最后加一 没什么区别啊 哈哈
int left_index =start;
int right_index=start+left_length;
int result_index=start;
while(left_index<start+left_length&&right_index<end+1)
{
if(data[left_index]<=data[right_index])
result[result_index++]=data[left_index++];
else
{
ans+=start+left_length-left_index; //核心,此处加的是左区间比当前data[right_index]大的整型的数量
result[result_index++]=data[right_index++];
}
}
while(left_index < start + left_length)
result[result_index++] = data[left_index++];
while(right_index < end+1)
result[result_index++] = data[right_index++];
}
void merge_sort(int *arr,int start,int end,int *result){
if