求助值域有交fhq合并(玄关)
  • 板块学术版
  • 楼主CuFeO4
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/28 20:25
  • 上次更新2024/12/28 23:28:05
查看原帖
求助值域有交fhq合并(玄关)
752441
CuFeO4楼主2024/12/28 20:25

写法1:

int Join(int x,int y){
        if(!x || !y) return x|y;
        D(x);D(y);
        if(pri(x) > pri(y)) swap(x,y);
        int a,b;split(y,val(x),a,b);
        ls(x) = Join(ls(x),a);
        rs(x) = Join(rs(x),b);
        return P(x),x;
    }

写法二:

int Join(int x,int y){
        if(!x || !y) return x|y;
        int rt = 0,a;
        while(y){
            a = y,D(a);
            while(ls(a)) a = ls(a),D(a);
            split(x,val(a),a,x);
            rt = Merge(rt,a);
            swap(x,y);
        }
        rt = Merge(rt,x);
        return rt;
    }

这两种应该都是比较常见的写法吧,但是第一种写法在Nauuo and Bug这道题值域很小时T了。

第一种写法TLE Link

第二种写法AC Link

求问是本题有什么特殊性质还是单纯因为第一种写法就是假的

2024/12/28 20:25
加载中...