標記永久化 學會了祭

2022-03-12 12:19:39 字數 742 閱讀 6283

乙個不套路的東西,沒啥好說的。

感覺不能叫學習筆記吧,只能叫「學會了祭」(

upd 2020.8.27:算了還是寫點字吧(

標記永久化是跟懶標記相對的一種樹形資料結構區間修改維護方式。

不難發現,用懶標記維護的話,任意時刻訪問任意節點,它維護的資訊一定是最新版(即算上了目前所有有關它的貢獻)。這樣懶癌患者會很舒服,直接呼叫節點資訊就是真實值了,不用有其他顧慮。

標記永久化同樣是每個節點維護乙個資訊和標記。不同的是,這裡的資訊是在初始值的基礎上,只算上落在子樹內節點(即後代)的貢獻,而標記是專門記錄落在此節點上的貢獻和的。

區間修改的時候:對於每個經過的節點,顯然它一定是將來要將待修改區間分成的節點(即被待修改區間完全包含)的祖先,也就是分成的節點在它子樹內,於是直接更新它的資訊(上傳或直接修改,具體看複雜度和可實現性);對於每個要將待修改區間分成的節點,它也是經過的節點所以資訊也按上面改,而且它的標記也要把本次的貢獻算上。

顯然,對乙個節點有貢獻的節點只可能是它的祖先或後代。後代的貢獻已經算在它自身維護的資訊中了,若想獲得此節點的真實資訊,要需要算上它的祖先貢獻和。而當前節點祖先和恰好是可以一路一邊走下來一邊計算的。仔細想想這個就是樹上差分的思想。

不難發現,標記永久化對樹的形態的穩定性有較強的依賴性。線段樹和 trie 顯然都是可以標記永久化的;而大部分平衡樹的形態都極其不穩定,一些祖先改啊改,標記永久化就失效了,這時候只能用懶標記及時地把祖先的貢獻算到當前節點維護的資訊裡。

一些應用:

標記永久化

標記永久化是線段樹的乙個技巧,常用於無法 或難以 進行 pushdown 的較複雜的資料結構如主席樹,樹套樹等。如何做?對每個節點維護 sum 和 add 考慮修改,當詢問與當前區間重合時,更新 add val 對所有經過的區間 sum val cdot r l 1 void modify int ...

標記永久化

1 概述 在可持久化線段樹中,我們常常要使用區間修改操作。這時候,如果再用下傳標記再向上更新的方式 pushdown pushup 來實現就會變得十分麻煩 因為要可持久化嘛 那麼,有沒有一種實現線段樹區間修改的方式可以不用下傳標記或向上更新呢?有,那就是標記永久化。2 原理 標記永久化的原理簡單來說...

Say「No」,你學會了嗎?

say no 你學會了嗎?2004 年,當蕭聖璇剛回國加入微軟亞洲工程院時,有乙個現象讓他難以適應 開會討論時,大家要麼三緘其口,要麼發表的意見不溫不火,會議結束後,大家卻接二連三地來到他的辦公室,開始對會議上的問題發表看法。在蕭聖璇看來,這些原本要在開會時解決的問題,為什麼非要留到會後才提出來?蕭...