逆序对 比如 3 2 1
3之前的数没有比它大的(或者说前面没有数了),所以没有逆序对
2之前的数有3比它大 所以有逆序对+1
1之前的数有 3 2 比它大 所以有逆序对+2
所以 3 2 1 序列 的 总的逆序对为3对
-----
在归并算法中 合并两个已经排序好的序列时 是从两个序列的首个位置开始进行比较
合并方法传入的参数为:first mid(分界下标) last
第一个序列下标:first ~ mid
第二个序列下标:mid + 1 ~ last
1.如果a[i] <= a[j] 显然 不存在 逆序对
2.如果a[i]>a[j] 显然 存在逆序对,此时,既然a[i]>a[j] 那么i后面的下标(i+1~mid)对应的数a[i]也绝对大于a[j] 所以存在逆序对(mid - i + 1)(包括a[i]在内的数以及后面的数都大于a[j],逆序对就为mid-i+1对)
经过归并排序之后,累加的逆序对数就是整个序列的总的逆序对数 即 答案
【注意】
由于输入的序列长度最大为500000 且每个数可达到999999999,所以累加逆序对数的变量最好用long long数据类型
时间: 2024-10-08 05:42:41