珂朵莉树
珂朵莉树()
0x01 珂朵莉树可以解决什么问题
对于涉及区间推平操作的问题,就是把区间内的所有数字变成相同的一个数。如果数据是随机的就可以使用珂朵莉树。
0x02 珂朵莉树的基本原理
比如一开始把一个区间分成这些部分,那么我们就可以用一个结构体将相邻的数字存起来,分别记录他们的始末点和这一段区间内的数字是多少。
关键字 的意思是即使是一个常数,也允许修改的值
将结构体存储在里面按照左端点进行排序,就变成了下图的样子。
0x03 核心函数
因为我们要对一个区间内的所有数字进行操作,那么我们只需要将这个区间从原来的区间中取出来修改好了之后再放回去,就可以高效的实现区间推平操作了。
我们按照这个位置来进行分裂,将区间分裂成两个区间。如果本身就是一个区间的开头,那么就不需要去分割了直接返回这个区间就可以了。
将区间取出来之后,我们要确定我们找到的这个是刚好是在以开头的这个区间,还是稍微大了一点点或者过大超出了最后一个区间。如果是第一种情况的话就可以直接返回这个区间,如果是后两种情况的话,可以先将这个迭代器向前退一个单位,然后这个时候看看区间的右端点和的大小关系,如果小于的话,那么就说明太大了,直接返回,否则的话就将区间一分为二再重新插入回去。
如图,我们将这个区间取出之后,将重新插入回去,就实现了。
当然,这个时候一定要先将区间的右端点取出来再将左端点取出来,否则可能会出现的情况。
修改操作
就是将区间分裂之后,循环遍历一遍区间,将所有的数都加上就好了。
0x04整体的模板
__EOF__

本文作者:HoneyGrey
本文链接:https://www.cnblogs.com/Haven-/p/16553875.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Haven-/p/16553875.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现