1. 程式人生 > 其它 >[學習筆記]CDQ分治

[學習筆記]CDQ分治

世界上,最漫長的,無疑是等待。直到風帶著芬芳,日落水塘。

發現我對CDQ分治的理解過於淺顯。
水平太差。

有三類問題。

解決和點對有關的問題

這類問題多用於統計特殊 \((i,j)\) 的數量/使某類點對返回值函式的值最值。

我們考慮分治:

我們遞迴處理\([l,mid],[mid + 1,r]\)

然後通過某資料機構/演算法處理\([l,mid] \to [mid + 1,r]\)

1D/1D動態規劃

1D/1D 動態規劃指的\(dp\)陣列為一維,轉移複雜度為\(O(n)\)

我們可以依舊是套路的處理。

我們遞迴處理\([l,mid],[mid + 1,r]\)

然後通過某資料機構/演算法處理\([l,mid] \to [mid + 1,r]\)

但是兩者之間的關係我們需要進行一個處理。

我們可以考慮CDQ分治的遞迴樹為一顆線段樹,CDQ分治為這棵樹的中序遍歷。

我們始終遵循\(x \to y\),我們先處理完全\(x\),再處理\(x \to y\),再處理\(y\) 的原則。

將動態問題轉化為靜態問題

這類問題通常為「需要支援做 xxx 修改然後做 xxx 詢問」的資料結構題。該類題目有兩個特點:

  • 如果把詢問 離線,所有操作會按照時間自然地排成一個序列。
  • 每一個修改均與之後的詢問操作息息相關。而這樣的“修改 - 詢問”關係一共會有\(O(n ^ 2)\)對。

我們此時把時間維作為第一維統計。

如果修改之間是獨立的,我們無需處理左右遞迴處理和跨域操作的關係,但如果操作依賴前面的操作,我們則依舊要遵循左先,轉移,右後的原則。

例題將在配套練習記錄中給出。