P3377 左偏樹,模板)

2021-09-18 07:46:11 字數 718 閱讀 8066

題意:

如題,一開始有n個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作:

操作1: 1 x y 將第x個數和第y個數所在的小根堆合併(若第x或第y個數已經被刪除或第x和第y個數在用乙個堆內,則無視此操作)

操作2: 2 x 輸出第x個數所在的堆最小數,並將其刪除(若第x個數已經被刪除,則輸出-1並無視刪除操作)

解題思路:裸的左偏樹

左偏樹學習:

左偏樹的距離用處就是保證每次都是在右子樹中進行插入,而右子樹有時最短的。所以可以保證進行一次merge的複雜度也就o(logn),n為左偏樹中的點的個數。還有注意,下面這個模板是用於頂部是最小值的情況

#include#define n 100009

using namespace std;

int val[n],fa[n],ch[n][2],dis[n];

int inline read()

while(ch>='0'&&ch<='9')

return x*f;

}int getfa(int x)

int merge(int x,int y)

void del(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個只有乙個數的集合,要求支援 合併兩個集合 查詢乙個集合中的最小值並刪除 左偏樹就是維護乙個滿足以下性質的樹 對於v al xval x valx 有val x llsx val xva lx llsx 且v al x lrsx val xva lx lrsx 對於任何節點有左子樹的深...

P3377 模板 左偏樹(可並堆)

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