猫树
注意:本文全程口胡。暂时没有代码。
猫树,出自immortalCO的博客,是“一种高效处理无修改区间或树上询问的数据结构”。
lxl说他自己反对用猫树这个名字,并且认为这个名字就像ODT一样奇怪,可能叫“二区间合并”更好一些
首先我们要明确猫树能干什么。
就如immortalCO的博客的标题所写的,猫树能够处理区间无修改询问。
当然这个询问需要满足一些简单的性质,比如有结合律,支持快速合并。像最大值,区间和,,最大子段和这样的都可以维护。
猫树的优势在于询问的时候可以做到 ,比线段树少一个 。
但是,猫树的劣势也很明显,就是做不了修改操作。
接下来我们给出猫树的思想及其算法实现。
猫树的思想在于利用分治做好预处理,以获得较低的询问复杂度。可以类比 ST 表,长链剖分做 LA 问题。
具体操作如下:我们取当前区间的中点,分别记录从中点出发,向左向右的“中缀和”。然后递归地对左右区间进行相似操作。
方便起见,称这些点为记录点。
举个例子理解一下:现在我们有区间 ,现在要维护和。
取 为中点向左向右统计,得到的就是 。
时空复杂度:因为递归 层,得时空复杂度都为 。
接下来是查询。我们的思想是,找到一个查询区间中间的记录点(很明显是存在的),然后利用已知的中缀和把左端点到中间,中间到右端点两个区间的答案合并起来就行了。这也就是为什么这个算法也被叫做二区间合并。
具体操作的时候,为了做到 ,我们需要一点位运算的小技巧。
我们发现,如果数组的下标从 开始,那么两个端点的二进制最长前缀长度就是其所在区间的深度。根据深度和左右端点我们就能 确定记录点了qwq
(二进制lcp求法:)
作者:pjykk
出处:https://www.cnblogs.com/pjykk/p/15873479.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现