樹狀陣列應用匯總 [全]
阿新 • • 發佈:2018-12-16
1. 逆序對 : 樹狀陣列維護比當前小的個數 , 權值作為下標 , 需要離散化 , 也可以擴充套件到前後比自己大或小的個數
2. 二維偏序問題 : 一維排序 , 二維樹狀陣列 , 也是權值作為下標 , 在樹狀陣列中插入1表示出現 ,
以後可以輔助CDQ分治解決三維偏序
3. 維護區間第k大 , 方法1 : 二分答案 logn^2 , 不在贅述
方法2 : 將樹狀陣列二進位制拆分 , 然後如果答案小於k , 就加上當前區間大小
通常用於求中位數 , 或其他擴充套件 , 二分答案可以求出樹狀陣列中(權值為下標) 的最大最小
4. 區間修改 , 單點查詢的差分樹狀陣列 : l插 , r+1插 , 單點查就好
5. 區間修改 , 區間查詢 : d[i] 為差分陣列 , 將字首和轉化為 , 維護兩個樹狀陣列
6. 二維樹狀陣列 : x減一個lowbit , 再把y減到0 , 統計答案 , 恢復y , x再減 直到x減到0
7. 矩陣修改 , 矩陣求和 : 類似5 , 維護4個樹狀陣列 , 可以得到
8. 字首/字尾 最大值 : 用處較少 , 只能維護到最前面或最後面 , 不能維護區間
9. 多元素型別題 (詢問某種特殊的值在l到r中出現次數) :
修改變成刪除和插入 , 按特殊的值排序 , 同一塊特殊值按時間排序 ,
每一塊特殊值做一次 , 做完後清零 , 大大地節省空間