关于笛卡尔树及Treap的线性构造法

前言

大家到知道笛卡尔树。
而且我们也可以把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及可持久化

你可能感兴趣的:(treap)