之前一直不想写的手写堆。
是大根堆模板,小根堆直接换一下转移的符号就行。
pile[maxn]是存储堆的数组,len是堆中元素的数量。
写法非常简单。
Code
void put(int k) { pile[++len]=k; int pla=len; while(pla>1) { int fa=pla/2; if(pile[fa]>=pile[pla]) return; swap(pile[fa],pile[pla]); pla=fa; } } int get() { int ans=pile[1]; pile[1]=tree[len--]; int pla=1; while(pla*2<=len) { int son=pla*2; if(son+1<=len&&pile[son]<pile[son+1]) son++; if(pile[pla]>=pile[son]) break; swap(pile[pla],pile[son]); pla=son; } return ans; }