【題解】Solution Set - NOIP2024集訓Day14 CDQ分治

CloudWings發表於2024-08-23

【題解】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 的步驟:

  1. 先把大於等於 mid\(h\) 分到左邊,小於的分到右邊。(實際上這一維最好以下標分開(這樣就不用 stable_partition 了。

    考慮把左邊的部分按照 \(h\) 重新排序。

(口胡不下去了(因為感覺怪怪的就去看了一下之前的程式碼,感覺還是挺好理解,所以就不想寫了(

所以下一個任務是在 15min 之內爆切 cdq(霧

相關文章