左偏树模板及题目推荐
【代码】:
//d[x] 距离最近外节点的距离
//r[x] 右儿子
//l[x] 左儿子
//v[x] 值
int merge(int x,int y)
{
if(x==0) return y; //只剩某一子数(点)的情况
if(y==0) return x;
if(v[x]<v[y]) swap(x,y);//我们以x为最大点
r[x]=merge(r[x],y);
if(d[r[x]]>d[l[x]]) swap(l[x],r[x]);//维护左偏树性质
d[x]=d[r[x]]+1;//左偏树性质
return x;
}
【推荐题目】:HDU 1512
【注意】:
①:空节点为-1(性质推得)
②:删除操作:将其左右子树合并,接上去即可
插入操作:将插入的点用倍增合成一树,插入即可
替换操作:先删除再插入(注意删除时d[x]=r[x]=v[x]=l[x]=0)