洛谷P3377 模板 左偏樹(可並堆)

2022-05-24 00:48:15 字數 536 閱讀 2429

題目大意:有$n$個數,$m$個操作:

$1\;x\;y:$把第$x$個數和第$y$個數所在的小根堆合併

$2\;x:$輸出第$x$個數所在的堆的最小值

題解:左偏樹,保證每個的左兒子的距離大於右兒子(距離的定義是該點到其子樹中最近的葉子節點的距離)

卡點:

c++ code:

#include #include #define maxn 100010

int n, m;

int val[maxn];

int fa[maxn], lc[maxn], rc[maxn], dis[maxn];

inline int find(int x)

int merge(int x, int y)

int pop(int x)

int main() else

} return 0;

}

洛谷P3377 模板 左偏樹(可並堆)

題目描述 如題,一開始有n個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作 操作1 1 x y 將第x個數和第y個數所在的小根堆合併 若第x或第y個數已經被刪除或第x和第y個數在用乙個堆內,則無視此操作 操作2 2 x 輸出第x個數所在的堆最小數,並將其刪除 若第x個數已經被刪除,則輸出 ...

洛谷 P3377 模板 左偏樹(可並堆)

有 n nn 個小根堆,每個堆只有乙個數,進行兩種操作 1 x y將第 x,y x,yx,y 個數分別在的小根堆合併 2 x輸出第 x xx 個數所在的的堆的最小數,並將其刪除,有多個則刪除最先輸入的,若第 x xx 個數已刪除,則輸出 1 1 1思路 左偏樹 include include def...

洛谷 P3377 模板 左偏樹(可並堆)

如題,一開始有 n 個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作 1 x y 將第 x 個數和第 y 個數所在的小根堆合併 若第 x 或第 y 個數已經被刪除或第 x 和第 y 個數在用乙個堆內,則無視此操作 2 x 輸出第 x 個數所在的堆最小數,並將這個最小數刪除 若有多個最小數,...