珂朵莉树学习笔记

珂朵莉树是一种由lxl发明的数据结构,适用于随机数据的暴力操作,如区间推平。通过使用平衡数据结构,如红黑树,实现O(nlognlogn)的时间复杂度。主要操作包括分裂、推平和修改,用于区间维护和高效修改。分裂操作用于区间切割,推平操作用于合并区间,修改操作涉及区间值的更新。在实际应用中,珂朵莉树能有效地处理区间数据的动态变化。
摘要由CSDN通过智能技术生成

珂朵莉树,又名老司机树(Old Driver Tree,ODT),是一种暴力数据结构,是由数据结构毒瘤、Ynoi 出题人 lxl 发明的一种对随机数据十分有效的暴力数据结构。这里使用 set 实现的珂朵莉树时间复杂度为 O ( n log ⁡ n log ⁡ n ) O(n\log n\log n) O(nlognlogn)

珂朵莉树主要应用于区间的“推平”操作,就是对一个区间内的所有值进行修改。当然不局限于单一的推平,可能还有其他操作,这时我们就需要用到珂朵莉树。

考虑一下,我们把几个区间推平之后,整个序列就会变成好几段有相同数的区间:

5 5 5 5 5 5 42 42 42 42 42 42 42 42 42 42 42 42 2 2 2 3 3 3 3 3 3 3 3 3

我们用一个结构体来表示每个数字相同的段:

struct node
{
   
    int l,r;//左右端点
    mutable int v;//区间值
    friend bool operator < (node a,node b)
    {
   
        return a.l<b.l;//按左端点排序
    }
};

这样处理过后我们把每一段区间插入到一个 set 中,set 根据我们重载的运算符排序,这样我们的序列就维护好了,set 里存储的东西如下:

l = 1 l=1 l=1
r = 2 r=2 r=2
v = 5 v=5 v=5
l = 3 l=3 l=3
r = 6 r=6 r=6
v = 42 v=42 v=42
l = 7 l=7 l=7
r = 7 r=7 r=7
v = 2 v=2 v=2
l = 8 l=8 l=8
r = 10 r=10 r=10
v = 3 v=3 v=3

开始时,我们每段只有一个数,set 里维护 n n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值