写法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
求问是本题有什么特殊性质还是单纯因为第一种写法就是假的