逆序对的定义
在一个序列中,若存在i < j,a[i] > a[j],那么a[i] 和 a[j]就是一对逆序对
归并排序求逆序对
归并排序简单来说就是每次把序列二分,然后合并两个有序序列
在合并两个有序序列的过程中,可以用两个指针i,j分别对两个序列进行扫描,每次将a[i] a[j]中较小的那一个放到临时数组中
若a[j] < a[i],因为两个序列都是有序序列,那么a[i]后面的所有数字都要比a[j]大
也就是说a[i]后面的每个数字都可以和a[j]构成逆序对,所以将a[i]后面的数字数量加入答案
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int a[30010];
int b[30010];
int cnt;
inline int read() {
int x = 0, f = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();}
return x * f;
}
void merge(int l, int r) {
if (l =