树状数组
思想
以当前这个数下标i为标准,遍历前面(0 ~ i - 1)的数,如果大于a[i]则逆序对数 + 1,
然后运用桶排序的思想,用a[j]的值作为下标,出现则记录为 1,运用树状数组维护前a[i]个数的和
然后用 i - sum(a[i]) 即得到前i个数中本应该小于却没有小的数(即逆序对数)
bit数组bit[x]代表从a[x - lowbit(x) + 1] ~ a[x]的和
1 |
|
以当前这个数下标i为标准,遍历前面(0 ~ i - 1)的数,如果大于a[i]则逆序对数 + 1,
然后运用桶排序的思想,用a[j]的值作为下标,出现则记录为 1,运用树状数组维护前a[i]个数的和
然后用 i - sum(a[i]) 即得到前i个数中本应该小于却没有小的数(即逆序对数)
bit数组bit[x]代表从a[x - lowbit(x) + 1] ~ a[x]的和
1 | #include <iostream> |