20220401刷題日記

P4097

李超線段樹裸題,爲了卡過 P4207 的精度跑去學了一下李超線段樹。大致思想是每個區間維護一個線段編號,這個線段在這個區間的中點處是最優的。如果能維護好這個,那麼一個點的最優值其實是所有包含它的區間的最優線段,這同時也啓發我們採用標記永久化。每次我們在線段樹上找到對應區間,然後修改,討論之後發現左子區間或右子區間也需要修改,進到對應區間修改即可。複雜度是 \(log^2 n\) 的。

一個實現技巧是,如果當前的比原先的優秀,那麼我們直接交換兩個值即可,帶着那個較小的繼續往下做。正確性:如果原先的那個較小的已經往下做過了,正確性顯然,一個在這個區間內的點,顯然我們新加進去的也會被考慮可能是答案,如果原先的沒有往下做,我們就需要往下去遞歸以保證正確性。如果沒有往下的話,那麼就好像交換了插入順序一樣的。

用李超線段樹實現即可。

P4027

寫了一個CDQ分治的斜率優化,但是被卡進度了,不得已只得去學李超樹。寫完李超樹就過了。

\(f_i=a_ix_i+b_iy_i\) 的形式,我們兩邊都除以 \(b_i\) 就化成典型斜率優化形式了,不難發現也滿足李超樹的形式,兩個 \(log\) 可以過。

P7141

非常好的構造,首先考慮 \(n\) 是偶數一定有解,如果 \(n\) 是奇數,考慮可以劃分問題,因爲 \(a_i=\frac{n+1}{2}\) 一定是填滿的,且不可能有相鄰,我們考慮這樣的一個子矩形,兩邊都是滿的,如果中間長度是奇數,直接和偶數一樣,黑白染色即可,我們重點討論長度是偶數的情況。

我們對整個矩形黑白染色,顯然左邊全部佔的是黑格,右邊全部佔的是白格,而我們期望在從左往右填的時候白格的個數會盡可能的多。顯然,第 \(i\) 列白格里的填的個數是這一列白格的個數減去前面填的黑格的個數,也就是減去前面填的總數,加上填的白格的個數。

然後我們考慮儘可能的靠近這個上界,不難發現,首先從下往上填白的,然後從上往下填黑的,就是正確的。

這也是出題人的做法

卡着上界填還不行的話,就真的不行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章