做個筆記!
【參考】http://blog.csdn.net/dlengong/article/details/7594919
3種思路:
1. 冒泡法統計交換次數。 O(N*N)
2. MergeSort同時統計。 O(NlogN)
3. 用binary index tree!。 O(NlogN),其實是基于IndexSort,然后用BinIdxTree求和。
BIT適用的場景是:
對于某個序列a0, a1, a2, ..., aN.
BITsum(0, m) [0 <= m <= N] == sum(a0, a1, ..., am).
和普通的sum不同點在于,當ai發生變化的時候,BIT支持在logN時間內重新算出sum值。
所以這條求逆序的方式就是indexSort找到當前max value對應的idx, 然后a(idx) = 1,然后BITsum(0, idx)看看前面有多少1,就是當前value的逆序數K, sum(K)就得到了整個序列的逆序數。