void update(int x)
{
int tmp = h[x];
if (x > N/2) return ;
if (h[2*x+1]==0)
{
if (h[x] > h[2*x]) swap(h[x], h[2*x]);
return ;
}
if (h[x] <= h[2*x] && h[x] <= h[2*x+1]) return ;
if (h[2*x] <= h[2*x+1]) swap(h[x], h[2*x]);
else swap(h[x], h[2*x+1]);
update(2*x); update(2*x+1);
}
void add(int x)
{
int tmp;
h[++N] = x;
for (int i = N/2; i >= 1; i--) update(i);
}
换成第一个题解的添加函数就没有问题了。。