P1908 逆序对
逆序对:在一个元素序列中有,a[i]>a[j],而i<j,则称这两个元素为一个逆序对。
逆序对使用分治的方法解决,相当于是进行一次归并排序(不懂的点这里),因此时间复杂度为o(nlogn)。
在对一个序列两个已排好序的子序列进行合并时,有两种情况
再这里用a[i],a[j]分别表示两个序列中的元素,l,mid,r 表示序列原序列最左,中间,最右下标。
- a[i]<=a[j],则待加入元素,与未加入元素之间没有逆序对。
- a[i]>a[j],则a[j]加入序列,a[j]与前一个序列中从i到mid的元素间有逆序对。
c语言实现:
#include<stdio.h>
#include<stdlib.h>
#define size 500005
int all[size], tmp[size];
long long int cnt = 0;//计数
void find(int l, int r