HDU1512 左偏樹 斜堆

2021-07-09 12:09:28 字數 555 閱讀 2580

本來我是在開開心心(淚流滿面)地刷scapegoat tree的,結果突然間就看見了乙個奇奇怪怪的東西——斜堆。

因為昨天剛好學了左偏樹,於是就來回憶了一發,然後發現。。。。。。。。。

既然有斜堆了為毛還要左偏樹啊!!!

嗯好吧均攤確實不靠譜(此處@splay),但你告訴我為毛斜堆跑得比左偏樹快啊!!!

好吧常數我吃了。

其實斜堆和左偏樹就一點不同,左偏樹只有在維護左偏性質的時候才會交換左右子樹,斜堆每次merge的時候都交換(各種均攤)

左偏樹(我寫程式自帶常數tat):

#include#include#includeusing namespace std;

const int n=100000+10;

int read()

return x;

}struct heapnodeheap[n];

int merge(int x,int y)heap[n];

int merge(int x,int y){

if(!x||!y)return x+y;

if(heap[x].v

HDU 1512 左偏樹 並查集

題意 有n只猴子,每只猴子都有乙個能力值.最初每只猴子都只認識自己.然後 給出m組詢問,每次都有兩隻猴子,如果他們相互認識輸出 1,否則他們會請出他們認 識的猴子中 能力值最大的猴子,這兩隻猴子自身的能力值除以2,然後兩隊猴子都 相互認識了.每次輸出這堆相互認識的猴子中能力值最高的.顯然需要乙個並查...

HDU 1512 左偏樹 並查集

思路 左偏樹裡面摻了一些並查集的應用 這裡放乙份左偏樹的 模板 重點就是merge函式了 int merge int k1,int k2 插入 合併原樹和新節點。刪除最小值 合併左右子樹。刪在某個地方的值 打個標記 以後用的時候再忽略 在這道題中 刪的時候 找到左右子樹 並查集變成它自己 再合併 b...

可並堆 左偏樹 斜堆

經典的二叉堆已經可以在 o log n 的複雜度的情況下維護堆這樣的資料結構,也有d 堆可以維護成 o log d n 雖然pop操作的複雜度是 o d log d n 然而這兩種堆不能滿足 o log n 的合併操作,它們的經常是 o n log n 即每次將乙個堆中的堆頂拿出來放到另乙個堆裡。雖...