【題解】Solution Set - NOIP2024集訓Day14 CDQ分治
https://www.becoder.com.cn/contest/5482
「CF364E」Empty Rectangles
*3000
擺爛了。
「SDOI2011」攔截導彈
CDQ的例題,之前做過(現在試圖自己再做出來。
第二問只用在第一問裡面記錄每一次是從哪個 \(j\) 轉移過來的,以及當前位的方案數就行了。
看了之前的程式碼,發現其實還不止,這裡其實還需要乘上後面的方案數。
也就是說,可能性 = (前方案數 \(\times\) 後方案數) \(\div\) 總方案數
下對於第一問考慮 dp。
\(f_i\) 前 \(i\) 個,欽定攔截第 \(i\) 個能攔截的最多個數。
令:\(f_0=0,h_0=\inf,v_0=\inf\)。
有轉移:
\[f_i=\max_{0\le j<i\wedge h_j>h_i\wedge v_j>v_i}f_j+1
\]
顯然一個三維偏序(還有一維下標),考慮用 CDQ 將 dp 最佳化到 \(O(n\log^2n)\)。
試著用殘餘的記憶,自己重新把三維偏序胡出來。下面是口嗨時間。
回憶一下 CDQ 的步驟:
-
先把大於等於
mid
的 \(h\) 分到左邊,小於的分到右邊。(實際上這一維最好以下標分開(這樣就不用stable_partition
了。考慮把左邊的部分按照 \(h\) 重新排序。
(口胡不下去了(因為感覺怪怪的就去看了一下之前的程式碼,感覺還是挺好理解,所以就不想寫了(
所以下一個任務是在 15min 之內爆切 cdq(霧