CDQ分治


課件鏈接

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分治后可降維。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM