P3377 模板 左偏樹 可並堆

2021-10-02 07:43:08 字數 893 閱讀 6895

開始時n

nn個只有乙個數的集合,要求支援

合併兩個集合

查詢乙個集合中的最小值並刪除

左偏樹就是維護乙個滿足以下性質的樹

對於v al

xval_x

valx​有val

x

llsx

val_xva

lx​llsx

​​且v al

x

lrsx

val_xva

lx​lrsx

​​對於任何節點有左子樹的深度大於右子樹的深度

每次合併時我們只需要將val

valva

l小的合併到val

valva

l大的右子樹上,然後每次合併完之後就判斷左右兩邊的深度大小。

時間複雜度o(n

log⁡n)

o(n\log n)

o(nlogn)

#include

#include

#include

using

namespace std;

const

int n=

1e5+10;

int n,m,val[n]

;struct left_tree

void

del(

int x)

intget

(int x)

}t;int

main()

if(op==2)

x=t.

get(x)

;printf

("%d\n"

,val[x]

);t.

del(x);}

}}

P3377 模板 左偏樹(可並堆)

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

P3377 模板 左偏樹(可並堆)

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

P3377 模板 左偏樹(可並堆)

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