rt,使用 fhq-treap 时,pushup 函数中
void pushup(int p){
t[p].si=t[t[p].ch[0]].si+t[t[p].ch[1]].si+1;
t[p].maxn=t[p].val;
if(t[p].ch[0]){
t[p].maxn=max(t[p].maxn,t[t[p].ch[0]].maxn);
}
if(t[p].ch[1]){
t[p].maxn=max(t[p].maxn,t[t[p].ch[1]].maxn);
}
}
t[p].maxn=t[p].val;
这句为什么是必要的?
我认为不必要的原因是 maxn 和 val 总是同时更新的,但是改了直接爆零。
其余代码与第一篇题解类似。