ODT 珂朵莉树 详解

人们都说珂教兴国,无奈珂学家里数我最菜,只会背一背ODT板子

珂朵莉镇楼

名字来源

ODT全称Old Driver Tree,中文名 珂朵莉树

有人为了CF896C发明了这个算法,这道题又和珂朵莉有关,所以这个算法叫做珂朵莉树

另外,由于发明者(lxl)的原因,也珂叫ODT(Old Driver Tree).

Warning!

ODT可以解决一些线段树不能解决的问题,如区间次幂求和

但要求数据随机,随机下跑得很快,开了O2更快

数据不随机就是个假算法,开了O2也没用

前置芝士:set

这个大佬讲的很详细

据说set是用红黑树实现的,O2下效率很高

set是自带排序+去重的

set自带一些函数

迭代器类似于指针


begin()  返回set容器的第一个元素

end()     返回set容器的最后一个元素的后一个

clear()   删除set容器中的所有的元素

empty()    判断set容器是否为空

size()     返回当前set容器中的元素个数

lower_bound() 返回指向大于或等于某值的第一个元素的迭代器

upper_bound() 返回大于某个值元素的迭代器

find() 返回一个指向被查找到元素的迭代器,如果没找到则返回end()。

count() 返回查找set中某个某个键值出现的次数,结果只会是0/1

erase(iterator) 删除定位器iterator指向的值

erase(key_value) 删除键值key_value的值

insert(key_value) 将key_value插入到set中,返回值是 pair< set::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。

最后一个看不懂没关系,只要知道insert().first返回的是一个迭代器就行


另外,set的储存元素是结构体时,需要重载"<"

像这样

friend bool operator <(const node &a,const node &b){return a.l<b.l;} `

下面是我的结构体写法

算法流程

想看视频讲解的点这里

ODT主要是依靠set来实现的,用来维护一个序列

set里装的是结构体元素,每个元素有3个基本属性:L,R,val

就相当于把序列分为若干个"块",每一个块里的元素在序列上相连且权值相等

L和R是块的左右端点,val是权值

借大佬的图一用

``

关键操作

一般写ODT时都有define IT set::iterator

split

将含有pos的区间[l,r]拆分为[l,pos-1)和[pos,r]

同时返回一个指向[pos,r]的迭代器

Assign/tuiping

极其暴力的一个操作

把原先的删了,再重新加一个新的

注意split时,要先split(r+1),再 split(l),否则会RE,原因有点复杂,想知道的看这个

其他操作

以CF896C为例,下面为了美观自动省去了long long和取模操作

这些真的是一个比一个暴力

区间求x次幂和

线段树无法完成此操作

用ODT的话暴力加起来就行

区间加

暴力加就行

区间赋值

Assign原封不动

区间k小

暴力取出来排个序就行

然后这道题就解决啦


后记:

1.要想用ODT一定要看看数据是不是随机的,有的时候出题人会给一部分随机数据的部分分

2.写ODT的时候要小心,写错很容易RE

题单:

下面的好多题都卡了ODT(但还有部分分),可以用来练练手

CF896C Willem, Chtholly and Seniorious这个用ODT可以过

P3740 [HAOI2014]贴海报

CF915E Physical Education Lessons这个用ODT可以过

P4979 矿洞:坍塌

P4344 [SHOI2015]脑洞治疗仪

P2572 [SCOI2010]序列操作

P5350 序列 题解 这个用ODT可以过

P2824 [HEOI2016/TJOI2016]排序 题解 这个用ODT也可以过,还挺快(开O2),没有被卡主要还是因为没有人想得到这题还能用ODT...

posted @   wljss  阅读(1024)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-07-17 洛谷P1494 小Z的袜子 莫队
点击右上角即可分享
微信分享提示