線段樹合併

2021-08-13 17:12:07 字數 655 閱讀 3073

做永無鄉的時候,以為是主席樹合併,後來感覺不對勁,唔。

x和y是兩顆樹的根。

這個演算法是從歸併演算法那引申的。

實際運作的時候,考慮到了線段樹的本質:線段樹有效節點就是葉子節點。

好像是句廢話。

其實不是,這句話啟發我們並不需要合併一整棵樹,

~-~-~-~-~-~

我們只需要處理好葉子節點,

~-~-~-~-~-~

考慮把y樹合併到x上,那麼把y樹的葉子節點合併到x上,那麼y樹其他節點就可以拋棄了。

至於是怎麼合併,其實並不能一概而論。永無鄉每一棵樹管理的是同樣的島嶼屬性,也就是每一棵樹的葉子節點本質相同,一一對應,那麼合併的話就是對應位置的節點合併。

所以我們遞迴的時候是同步跟蹤兩顆樹對應位置的。(2-和3-)

從**上看,有兩種返回方式,一種是「1-」,一種是「5-」

1-是訪問某一棵樹的空結點的情況,那麼返回不空的那個的序號給上一層,就完成了這裡的歸併,注意,x+y不是為了加和,而是為了返回有效節點標號。

5-是中間的節點,因為獲取y樹葉子就可以,所以 中間節點 就返回x樹的原結點即可。

int merge(int x,int y)

**就這麼短。

線段樹合併

今天寫dsu on tree 的時候發現不會寫線段樹合併,於是滾來寫線段樹合併部落格 對於值域相同的兩個權值線段樹x xx和y yy 假設把y yy合併到x xx上 每個節點有兩種情況 其中至少有乙個節點沒有權值 x y x y x y 直接x x y x x y x x y x 0?y x x 0...

線段樹合併

某一天馬學長給我看了乙個lca的題目,然而確實是lca 樹上差分,但是僅僅有lca和樹上差分解決不了,然後我就去面向題解程式設計了。可是這個線段樹合併是個什麼東東。然而今天看書,突然看到了這個線段樹合併。就寫一下了。mmh。p4556 vani有約會 雨天的尾巴 題目背景 深繪里一直很討厭雨天。灼熱...

線段樹合併

線段樹合併雖說是比較基礎的內容,且我一直都知道大概的實現方式,但直到最近我才正式去寫過一次,我真的太弱了啊。下面從暴力合併開始,依次介紹幾種線段樹合併的方式。直接暴力摳出線段樹中的元素,然後暴力合併。總合併時間複雜度應為 o n 2logn 應該算是暴力合併的一種優化。即,每次合併時選取較小的一棵線...