勢能線段樹/吉司機線段樹-我沒有腦子


勢能線段樹/吉司機線段樹

BZOJ3211 花神游歷各國
BZOJ5312 冒險
BZOJ4355 Play with sequence
BZOJ4695 最假女選手

\(A_i = max(A_i, x)\) 這種操作的 tag 不需要實際記錄下來, son.mn1 = min(max(son.mn1, dad.mn1), dad.mx1) 就行了。

修改 mn1, mn2 的時候需要特判區間只有 1 個數和 2 個數的情況,因為這些情況涉及到 mx1, mx2 也可能改變。

想清楚 tag_covertag_add 應該如何疊加。

想清楚怎樣更新嚴格的 mn1, mn2

代碼長的時候心態別崩,不要皮,不要打錯變量名……這是老生常談了。

善於利用黑暗暴走 OJ 。

關於復雜度證明:關鍵節點,似乎一個關鍵節點改變用一個 log ,然后根據 tag 標記的原理至多 log 個 tag ,所以理論上是 \(O(n\cdot \log^2 n)\) ,實際上接近 \(O(n\cdot \log n)\)

upd: 一點優化

  1. 雖然還沒有到達要修改的區間 \([s,t]\) ,但是修改操作對於包含 \([s,t]\) 的區間 \([l,r]\) 都已經沒有了影響,應該直接返回。

  2. 區間 and 上或者 or 上一個數 \(x\) ,查詢 \(max\) 的題,按位討論,對於 \(sum\_and\ xor\ sum\_or = 1\) 的位(等於 \(0\) 時顯然怎么操作都不會改變 \(max\) ),只要 \(x\) 在這些位的值全部相等即無影響,因為這樣要么完全沒有修改這些位,要么么全部修改成了一個相同的值。

((p->s_a ^ p->s_o) & x) == 0 || ((p->s_a ^ p->s_o) & x) == (p->s_a ^ p->s_o)

只討論了一種也不會太慢,但確實加上會快一些。

我為何會深入思考這個?因為 LOJ6507 「雅禮集訓 2018 Day7」A T 飛了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM