CDQ分治
[BOI2007]MOKIA
題意:一個2000000*2000000的棋盤,每個格子有一個數,維護兩種操作:
ADD x, y: a A[x, y] += a;
QUERY x0, y0, x1, y1: 詢問矩陣內的和。
CDQ分治時按x維排序使用掃描線,y維使用樹狀數組。每個詢問拆成兩部分,(x0, y0, y1)與(x1, y0, y1)。
掃描到x0時,貢獻為負,ans -= sum(y0, y1), 掃描到x1時貢獻為正,ans += sum(y0, y1)。
[VIOLET3]天使玩偶
維護二維點集。1.插入點(x, y),2.詢問離(x, y)曼哈頓距離最近的點的距離。
CDQ分治需要分類討論。左下,左上,右下,右上部分點的最近點。以左下為例。即求左下中x+y的值最大的點。
無1操作時,按x維排序,樹狀數組處理。
有1操作時,CDQ分治時按x維排序,處理同無1操作。
三維偏序統計問題。參見上一篇博文。
四維偏序simle版判定。
四維的點集。判斷每個點是否存在一個點比它大。大的定義為四維中任意一維都比它大。
考慮對任一點,是否存在某一點四維都比它小。
按第一維排序后,有了時間限制。等價於任一點,排在前面的點是否存在其他三維都比它小。
因為是判定性問題,我們可降一維,判斷第二維與第三維比它小的點中第四維的最小值,改為非判定性問題。
可用CDQ分治再降一維。
CDQ分治時按第二維排序,第三維使用樹狀數組,求前綴最小值即可。
四維偏序normal版統計
四維的點集,求最長上升子序列,即求每個點比它小的點的個數。
兩次CDQ分治。不會。
五維偏序統計
四維的點集,求最長上升子序列,即求每個點比它小的點的個數。
三次CDQ分治?多了兩個log常數大,性能可能不及O(n^2)。
[FJOI2012]長度為N的數組開始為空。每次執行操作Pi, Qi, 表示在Pi位上填上Qi,輸出每次操作后的逆序對數。
CDQ分治,合並統計時可離散化+樹狀數組搞一下即可。
還有DP上的CDQ分治,沒有學,道理類似。
===========================================================================================================
總結:
CDQ分治是基於時間分治。
在線問題離線化。
CDQ分治后可降維。
