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

本文介绍了一种笛卡尔树的线性构造方法,并通过类似Treap的旋转操作进行维护。利用单调栈来保持从根节点到最右侧节点的路径,通过不断向栈顶节点的右侧添加新节点,实现笛卡尔树的快速构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值