樹狀數組小結
最近做了HDU幾道樹狀數組的題,小小總結一下……
樹狀數組是一個查詢和修改複雜度都爲log(n)的數據結構,假設數組a[1..n],那麼查詢a[1]+…+a[n]的時間是log級別的,而且是一個在線的數據結構,支持隨時修改某個元素的值,複雜度也爲log級別。
Cn = A(n – 2^k + 1) + … + An ;
此處的k爲n的二進制形式末尾0的個數,可以利用Lowbit()函數找出k
注意:下標不能從0開始:
當i = 0,0 + Lowbit(0) = 0,會造成死循環!
主要三個函數:
樹狀數組功能:
1、單點更新,區間求和(第一類)//HDU 1166 敵兵佈陣
2、區間更新,單點求值(第二類)//HDU 1556 Color the ball
3 、逆序數的應用,可以求左邊小於它的數,右邊大於它的數,反過來可以求
⁂
題目:
HDU 1166 敵兵佈陣 ,樹狀數組模板題,單點更新,區間求和
⁂
HDU 1556 Color the ball 區間更新,單點求值
⁂
HDU 1541 Stars 樹狀數組應用
⁂
HDU 1892 See you~ 簡單二維樹狀數組
⁂
HDU 2642 Stars 二維樹狀數組
⁂
HDU 3584 Cube 三維樹狀數組,只有0,1的區間更新,單點求值
⁂
HDU 2689 Sort it 求逆序對
⁂
HDU 2838 Cow Sorting 逆序數的應用
⁂
HDU 1394 Minimum Inversion Number 逆序對應用
⁂
HDU 2688 Rotate 求正序數,然後模擬
⁂
HDU 2852 KiKi’s K-Number 求大於a的第k大元素,可以用二分枚舉
⁂
HDU 2227 Find the nondecreasing subsequences 利用樹狀數組求遞增序列個數
⁂
HDU 3450 Counting Sequence 類似2227
⁂
HDU 2492 Ping Pong 求長度爲3的順序序列有多少個