堆操作模板

2021-10-09 10:15:27 字數 1032 閱讀 6383

#include

#include

using

namespace std;

const

int n =

1e5+10;

int h[n]

,ph[n]

,hp[n]

,n,cnt,m;

// cnt表明現在容器中總的元素個數(可以作為容器末尾元素的指標)

// m記錄當前所使用元素的序號

// p理解為pointer指標 h理解為heap ph是從指標陣列指向堆的對映 ph[k] 通俗理解就是第k個插入的元素現在在容器中的下標

// hp是從堆指向指標的反向對映 互相構成反函式的關係 hp[k] 通俗理解就是容器中第k個元素在ph陣列中的下標 其結果就是第hp[k]個插入

// 這兩個陣列互相對應 缺一不可

void

head_swap

(int a,

int b)

// 當使用堆這種容器的時候,還需要修改中間元素的值的時候,就需要自己定位中間元素

// 的位置,需要使用head_swap自己維護數值和堆中元素的節點的對映關係 要知道第k個存入的元素是啥 用乙個陣列來依次入插入元素的序號

void

down

(int x)

}voidup(

int x)

// 上游操作

}int

main

(void

)else

if(op ==

"pm"

)// 輸出當前堆中的最小值

else

if(op ==

"dm"

)// 刪除當前堆中的最小值

else

if(op ==

"d")

// 刪除第k個插入的元素

else

if(op ==

"c")

// 修改第k個插入的元素 改為x

}return0;

}

配對堆模板

配對堆是一種可並堆 題意 兩種操作,合併兩個堆或者查詢乙個堆的最小值,n 1 06 n leq 10 6 n 106pai ring hea ppairing heap pairin g he ap還挺好寫的,不過並沒有傳說中那麼快 這裡沒有dec reas e ke ydecrease key d...

模板 可並堆

想學非旋轉的treap 然後看到裡面提到斜堆 順便學了學可並堆 可並堆 1.左偏樹 其實他介紹了4種可並堆 2.斜堆 好像說是類似平衡樹里的 splay merge a,b b.val 大根堆 merge a.r,b swap a.l,a.r 細節什麼的還有一點 大體思想是合併a和b時 先合併a的右...

模板 堆的結構

這裡是最小堆,最大堆也是類似的。1.堆是一顆完全二叉樹。性質 子節點的值一定不小於父節點的值。堆的儲存用乙個陣列heap n 即可。由於完全二叉樹的性質,節點是按順序排列的,i 節點的子節點編號為 2i 1 和 2i 2 同理 i 節點的父節點為 i 1 2 操作 堆有插入和刪除兩種操作,由於是二叉...