警钟敲烂 WA 20pts,AC on #5,6
查看原帖
警钟敲烂 WA 20pts,AC on #5,6
547616
Qshuqi楼主2025/1/20 11:24

在merge函数中的pushdown函数要放在开头。

具体的

WA:

int merge(int x,int y){
    if(!x||!y)return x|y;
    pushdown(x),pushdown(y);
    if(hep[x].val>hep[y].val)swap(x,y)
    ....
}

AC:

int merge(int x,int y){
    pushdown(x),pushdown(y);
    if(!x||!y)return x|y;
    if(hep[x].val>hep[y].val)swap(x,y)
    ....
}

原因:当你连续删除堆顶是会一直调用merge(ls(x),rs(x));merge(ls(x),rs(x)); 若该堆为链状,那堆顶将不会被 pushdownpushdown 下来就被删除。

2025/1/20 11:24
加载中...