#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 操作 堆有插入和刪除兩種操作,由於是二叉...