对付一些需要合并堆的题目,这里写两种,斜堆和随机堆
1.斜堆,merge类似treap,merge完交换左右子树,没了。
int merge(int x,int y)
{
if(!x||!y)return x+y;
if(v[x]<v[y])swap(x,y);
rs[x]=merge(rs[x],y);
swap(ls[x],rs[x]);
return x;
}
2.随机堆,真的基本就是treap,rand放左放右,感觉更不容易被卡
int merge(int x,int y)
{
if(!x||!y)return x+y;
if(v[x]<v[y])swap(x,y);
rand()&1?ls[x]=merge(ls[x],y):rs[x]=merge(rs[x],y);
return x;
}