插入一个数:
heap[++size]=x; up(size)
求集合中最小值
heap[1]
删除最小值
heap[1]=heap[size];size--;down(1);
删除任意一个元素
heap[k]=heap[size];size--;down(k);up(k);
修改任意元素
heap[k]=x;down(k);up(k);
向下调整操作
void down(int u)
{
int t=u;
if(2*u<=v&&h[t]>h[2*u])t=2*u;
if(2*u+1<=v&&h[t]>h[2*u+1])t=2*u+1;
if(t!=u)
{
swap(h[t],h[u]);down(t);
}
向上调整操作
void up(int u)
{
while(u/2&&h[u/2]>h[u])
{
swap(h[u],h[u/2]);
u=u/2;
}
}