最近學了一些分塊,來總結一下個人感受:
分塊是什么呢?就是把一個大塊拆成若干個小塊進行計算,每個小塊有可能有一些共同特點,或者每個小塊內部是有順序的,這樣,在修改操作的時候,只需要算出兩邊的節點所屬的小塊的編號分別是什么,然后兩邊的散塊(姑且這么叫)可以進行暴力修改,而中間的由於題目不同,可以進行不同的操作,比如說區間加,那么就可以在中間的每個小塊上面直接像線段樹一樣打一個lazy標記,標記區間增加了多少。然后在查詢的時候就可以直接對散塊進行暴力查詢,然后對整塊運用之前設置的lazy標記,或者保證有序后用二分進行從O(n)進行到O(log(n))的優化。
例題:【BZOJ】3343教主的魔法 http://www.cnblogs.com/BeyondW/p/5908139.html
【BZOJ】2453維護隊列 http://www.cnblogs.com/BeyondW/p/5908478.html
【BZOJ】2120: 數顏色 http://www.cnblogs.com/BeyondW/p/5908478.html