史上最詳盡的LCT講解

2021-08-11 05:44:58 字數 2828 閱讀 5562

—–摘自popoqqq&&優秀的學姐

『lct能幹嘛』

(1)維護乙個序列,支援下列操作:

區間求和

區間求最值

區間修改

求連續子段和

這個線段樹就可以解決 具體做法不加累述了

(2)維護乙個序列,支援下列操作:

區間求和

區間求最值

區間修改

求連續子段和

新增一段區間

刪除一段區間

翻轉一段區間

splay的基本操作

(3)維護一棵樹,支援下列操作:

鏈上求和

鏈上求最值

鏈上修改

子樹修改

子樹求和

樹鏈剖分!!!

(4)維護一棵樹,支援下列操作:

鏈上求和

鏈上求最值

鏈上修改

斷開樹上的一條邊

連線兩個點,保證連線後仍然是一棵樹

由於樹是動態的,我們不能每次操作都重標號一遍 樹鏈剖分搞不了了

然而我們可以沿用樹鏈剖分的輕重鏈剖分的概念

既然是動態那麼我們肯定要把靜態的線段樹換成動態的splay

於是就有lct≈樹鏈剖分+splay

『引入一些概念』

preferred child:重兒子,重兒子與父親節點同在一棵splay中,乙個節點最多只能有乙個重兒子

preferred edge:重邊,連線父親節點和重兒子的邊

preferred path:重鏈,由重邊及重邊連線的節點構成的鏈

『auxiliary tree(輔助樹)』

由一條重鏈上的所有節點所構成的splay稱作這條鏈的輔助樹

每個點的鍵值為這個點的深度

輔助樹的根節點的父親指向鏈頂的父親節點,然而鏈頂的父親節點的兒子並不指向輔助樹的根節點

(兒子認爹&&爹不認兒子)

原樹中的重鏈-> 輔助樹中兩個節點位於同一棵splay

原樹中的輕鏈-> 輔助樹中子節點所在splay的根節點的father指向其父節點

注意原樹與輔助樹的結構並不相同

那麼lct中最重要的操作可以說是….

『access操作』

目的:將x的重邊切斷,並將x到根的路徑上所有的邊都搞成重邊。

具體實現:根據輔助樹按照深度為關鍵字的性質。不斷地將乙個結點的父親轉到根,然後把這個結點接到它父親的右兒子,此時要切斷x下面的所有重邊

『reverse操作』

目的:將原樹中的x結點轉到根。

具體實現:因為原樹是虛樹,所以在原樹中進行變換實際上是在輔助樹中進行變換。首先access乙個點,再將這個點在輔助樹中轉到根。又是根據輔助樹按照深度為關鍵字的性質,將這個點所在的splay樹反轉,實際上改變了深度的關係,也就是實現的原樹的換根。

那麼知道這兩個之後其他的都是小菜咯

『link操作』

目的:將兩個不連通的點連通。換句話來說,合併或扔到一顆樹里。

具體實現:首先進行reverse操作,在原樹中將乙個點轉到那個點所在的樹的根。然後將這個轉到根的點的father接到另外乙個點上。可以進行一次splay來update。

『cut操作』

目的:將兩個連通的點不連通,換句話說,把一棵樹拆成兩棵樹。

具體實現:首先進行reverse操作,在原樹中將乙個點轉到那個點所在的樹的根。然後access另外乙個點,把另外乙個點在輔助樹中轉到根。由於這兩個點原先是連通的,那麼進行access操作之後兩個點在輔助樹中一定是乙個位於根,乙個位於根的左兒子(深度)。所以在輔助樹中把這個邊砍掉就行了。

『find操作』

目的:尋找乙個點在原樹中的根。

用於:判斷兩個點的連通性。

具體實現:首先access這個點,然後在輔助樹中將這個點轉到根,由於輔助樹按照深度為關鍵字排序,所以不斷地向左子樹尋找,就可以找到深度最小的根。

差不多就這些啦,還有一些奇怪的求和啊,維護最大值最小值什麼的和線段樹平衡樹等資料結構基本一樣。也難怪,lct其實就是線段樹、平衡樹的延伸。

以後的題目訓練博主會漸漸發到blog裡哦,期望資瓷!

史上最詳盡的平衡樹 splay 講解與模板

首先宣告 萬分感謝gty大哥的幫助!這年頭能找到簡單易懂的陣列版平衡樹模板只能靠學長了!變數宣告 f i 表示i的父結點,ch i 0 表示i的左兒子,ch i 1 表示i的右兒子,key i 表示i的關鍵字 即結點i代表的那個數字 cnt i 表示i結點的關鍵字出現的次數 相當於權值 size i...

史上最詳盡的斜率優化!

最近被欽定要寫教材,負責斜率優化那一塊,就把寫的內容搬了些上來。3.6.1斜率優化dp的基本思想 考慮這樣乙個問題 現在要給n個數a 1 a 2 a n 分組,每分出一組,你的代價為該組所有數的和的平方 乙個常數m 即設你分出的一組數字是2,3,4,m 5,則你分出該組的代價為 2 3 4 2 5 ...

史上最詳細webpack講解

webpack是前端方面的靜態資源打包工具,能夠讓瀏覽器也支援模組化,他會根據模組的依賴關係進行靜態分析,然後按照某種規則生成靜態資源 安裝webpack 安裝webpack npm install g webpack 或者 安裝最新版webpack npm install g webpack 如果...