前言
大家到知道笛卡尔树。
而且我们也可以把treap当作笛卡尔树。
现在将介绍笛卡尔树的线性构造法。
线性构造
维护笛卡尔树从根开始一直往右走的那一条链,这个用单调栈维护。
每次往栈顶的右儿子加点。
然后类似treap一样,就是模拟treap的旋转。
可以看代码理解。
fo(i,1,n){
j=0;
while (top&&fix[i]<fix[sta[top]]){
right[sta[top]]=j;
j=sta[top];
left[i]=sta[top];
top--;
}
if (top) right[sta[top]]=i;
sta[++top]=i;
}
由于我比较懒所以没有详细介绍。
可以看这里,有图非旋转treap及可持久化