堆
down函数:递归下沉
void down(int u)
{
int t = u;
if(2 * u <= cnt && h[2 * u] < h[t]) t = 2 * u;
if(2 * u + 1 <= cnt && h[2 * u + 1] < h[t]) t = 2 * u + 1;
if(t != u)
{
swap(h[t], h[u]);
down(t);
}
}
up函数:上调
void up(int u)
{
while(u / 2 > 0 && h[u] < h[u / 2])
{
swap(h[u], h[u / 2]);
u /= 2;
}
}