參考
直接看ioi
ioiio
i國家集訓隊**就行了,講的很好。
補充結構體定義:
struct tree
tree[maxn]
;
其中val
valva
l代表該節點的值,dis
disdi
s代表距離,son
[0
]son[0]
son[0]
代表左兒子編號,son
[1
]son[1]
son[1]
代表右兒子編號,rtrt
rt代表該節點的根節點(即所在堆的堆頂)。
合併操作:
int
merge
(int x,
int y)
查節點x
xx的根節點:
int
father
(int x)
其實就是並查集的路徑壓縮。
刪除操作:
刪除根節點:(根據題目要求可自行修改)
inline
intdelete
(int x)
刪除某個節點:(考慮到了所有情況)
待補
修改某個點的鍵值:
刪除該點,然後修改值後再插入到左偏樹中即可。
左偏樹總結
既然新學了左偏樹,那我就來寫一些學了左偏樹之後的總結吧 首先,它支援的是兩個堆的合併過程。那麼最容易想到的是把乙個堆的元素全部彈出,乙個乙個加入另乙個堆中,就合併了。顯然這樣合併的複雜度是o n 的,再加上程式的其他部分,很慢。我們就考慮讓複雜度減小到o logn 很恐怖,沒錯,這就是左偏樹存在的意...
左偏樹 模板
神經病也可以寫成右偏樹 具體左偏指左節點的距離 geq 右節點的距離 距離指離最近擁有空節點的節點的距離 乙個節點的值一定 或 leq 或 geq 或 其子節點的值 由於左偏性質,每次可以合併至右邊,維護左偏性質後就可以保證複雜度 被踩爆的板子 或者是我?include define ls lson...
猴王 左偏樹
題目描述 很久很久以前,在乙個廣闊的森林裡,住著n只好鬥的猴子。起初,它們各幹各的,互相之間也不了解。但是這並不能避免猴子們之間的爭吵,當然,這只存在於兩個陌生猴子之間。當兩隻猴子爭論時,它們都會請自己最強壯的朋友來代表自己進行決鬥。顯然,決鬥之後,這兩隻猴子以及它們的朋友就互相了解了,這些猴子之間...