打普通可持久化 FHQ 的时候,merge 应该这么写:
int merge(int x,int y){
if(!x||!y){
return x|y;
}
if(a[x].num<a[y].num){
int newn=newp(0);//*
a[newn]=a[x];
a[newn].r=merge(a[newn].r,y);
change(newn);
return newn;
}
else{
int newn=newp(0);//*
a[newn]=a[y];
a[newn].l=merge(x,a[newn].l);
change(newn);
return newn;
}
}
可以观察到我们新开了节点,但是为什么可持久化文艺 FHQ 就不需要新开节点去可持久?