可持久化文艺 FHQ 的一点问题

学术版

Shunpower @ 2022-05-21 10:20:23

打普通可持久化 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 就不需要新开节点去可持久?


by Subset_Sum @ 2022-05-21 10:28:28

@BMTXLRC

您也没写,能解释一下吗?

我是lz小号


by BMTXLRC @ 2022-05-21 10:30:58

https://www.luogu.com.cn/record/76114811


by BMTXLRC @ 2022-05-21 10:31:25

要调大数组,反正开不开无所谓,我觉得开最好,都能AC


by Subset_Sum @ 2022-05-21 10:32:10

@BMTXLRC

谢谢,所以开不开都是一样的对吧


by BMTXLRC @ 2022-05-21 10:32:48

我的理解是分裂的时候就已经开了节点了,再开一个就重复了一遍,至于可持久化平衡树的问题,我觉得不开也可以,看个人习惯吧。


by BMTXLRC @ 2022-05-21 10:33:14

@HJL_yyds 至少经过我的测试,可持久化文艺平衡树开不开都一样,我一会儿测可持久化平衡树


by BMTXLRC @ 2022-05-21 10:34:06

https://www.luogu.com.cn/record/76115167

这一份可持久化平衡树没有开节点,也是AC的


by Yahbim @ 2022-05-21 10:51:37

@BMTXLRC AC 是数据弱,不开新节点是可以卡的。数据弱到了 erase 写错都可以 AC 的程度。


by Yahbim @ 2022-05-21 10:52:38

@HJL_yyds 文艺平衡树不知道,但我觉得至少普通的可持久化 fhq 的 merge 要新开节点,不然 erase 会挂掉


by BMTXLRC @ 2022-05-21 10:56:14

@Yahbim 请教一下,这玩意要怎么卡啊/kk


| 下一页