CDQ 分治學習筆記

LiJoQiao發表於2024-10-24

鮮花

開新坑。
早該卷卷了。

集訓隊論文自認為寫的很清晰。
感覺對於一道自己進集訓隊時的國賽題能發明一種新做法很牛啊!

簡述

CDQ 分治是一種離線分治做法。
CDQ 分治並沒有很固定的模板,這是一種分治思想的延伸。

對於一道帶修的資料結構問題,我們可以將每個查詢視作其之前修改對其造成影響的結果。
因此我們可以用一個資料結構進行初始化和所有修改後再進行查詢其結果。

假設一個資料結構問題中有修改和查詢的操作共 \(m\) 個。
solve(l,r) 函式為解決對於任意在操作 \(l\)\(r\) 中的任意查詢 \(i\),計算 \(\left[l,i\right)\) 對其造成的影響。
因此 solve(1,m) 即為我們的此題的目標。
solve(l,r) 中,令 \(mid=\left\lfloor\dfrac{l+r}{2}\right\rfloor\),先執行 solve(l,mid)solve(mid+1,r),之後再考慮 \(\left[l,mid\right]\) 中的修改對 \(\left[mid+1,r\right]\) 中查詢的影響。
以上即為 CDQ 分治的大體思路。
\(\left[l,mid\right]\) 中的修改對 \(\left[mid+1,r\right]\) 中查詢的影響是解題的一個關鍵,有時也會運用 solve(l,mid)solve(mid+1,r) 中的計算進行合併(如集訓隊論文中的 Cash 中的歸併排序)。

例題

在寫了。