數列分塊入門 1~9
數列分塊入門 1
區間加法,單點查詢
完整的塊更新標記,不完整的塊暴力更新 $ O(q\sqrt{n} ) $
數列分塊入門 2
區間加法,查詢區間內比 x 小的數的個數
每個塊內排序一下,查詢二分一下 $ O(q\sqrt{n}\mathrm{log}n) $
數列分塊入門 3
區間加法,查詢區間內 x 的前驅
每個塊內維護一下,查詢二分一下
也可以用 set
數列分塊入門 4
區間加法,區間求和
維護一下塊的和
數列分塊入門 5
區間開方區間求和
我們發現開根多次後每個數都會變成 1,變成 1 之前暴力修改就可以 $O(kn + q\sqrt{n}) $
數列分塊入門 6
單點插入 單點詢問
我們把初始的數列拆成長度爲 的塊,維護每塊的長度
每次插入時在塊內暴力插入,如果一個塊的長度超過了 那麼我們將它拆成兩塊
數列分塊入門 7
區間乘法 區間加法 單點詢問
像線段樹一樣維護標記就可以了
數列分塊入門 8
每次區間詢問等於 x 的數的個數,並將這個區間的所有數改爲 x
如果一個塊內的數都不同的話,就暴力的查詢塊,這樣每次詢問最多打亂兩個塊
數列分塊入門 9
詢問區間最小衆數
一段區間的衆數可能是 所有完整塊內數的衆數 或者 不完整塊中的數
那我們可以對每對 i, j 預處理出第 i 塊到第 j 塊的衆數
這樣每次詢問我們只需要查詢 級別的數在區間內出現的次數就可以了
我們可以離散化後用 vector 存下每個數出現的位置,然後二分就可以了 $ O( n\sqrt{n} + q\sqrt{n}\mathrm{log}n) $