给定一个长度为 nn 的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下:对于数列的第 ii 个和第 jj 个元素,如果满足 i<ji<j 且 a[i]>a[j]a[i]>a[j],则其为一个逆序对;否则不是。
输入格式
第一行包含整数 nn,表示数列的长度。
第二行包含 nn 个整数,表示整个数列。
输出格式
输出一个整数,表示逆序对的个数。
数据范围
1≤n≤1000001≤n≤100000,
数列中的元素的取值范围 [1,109][1,109]。
输入样例
6
2 3 4 5 6 1
输出样例
5
解题:
实际上是统计归并排序后的子序列中逆序对
见上图
条件为:Li为左边的子序列,Ri为右边子序列
思路:(1)当发现Ri子序列中arr[j]<Li子序列中arr[i],此时发现出现一个逆序对
(2)又由于Li是升序序列(因为归并已经排列好了),所有可以肯定,相对于从下标i到mid之间,都大于arr[j]
(3)由此可知,相对于arr[j],在Li子序列中,有mid