如果你WAon#2
注意:某个点位置存在最大种类救济粮当且仅当该种类粮食数量大于零
Wrong Code:
void maintain(int rt)
{
if(ns[ns[rt].lch].num>=ns[ns[rt].rch].num)
{
ns[rt].num=ns[ns[rt].lch].num;
ns[rt].sig=ns[ns[rt].lch].sig;
}
else
{
ns[rt].num=ns[ns[rt].rch].num;
ns[rt].sig=ns[ns[rt].rch].sig;
}
return ;
}
AC Code:
void maintain(int rt,int l,int r)
{
if(l==r)
{
if(ns[rt].num>0)ns[rt].sig=l;
else ns[rt].sig=0;
}
else
{
if(ns[ns[rt].lch].num>=ns[ns[rt].rch].num)
{
ns[rt].num=ns[ns[rt].lch].num;
ns[rt].sig=ns[ns[rt].lch].sig;
}
else
{
ns[rt].num=ns[ns[rt].rch].num;
ns[rt].sig=ns[ns[rt].rch].sig;
}
}
return ;
}
同样的,每次在合并/初始update时都要记得判断一遍num是否为零