[学习笔记]猫树

本文介绍了一种通过分治树预处理实现高效无修改区间或树上询问处理的算法,该算法由ImmortalCO喵提出,适用于序列、区间及树上的查询问题,尤其在处理大量询问时具有优势。与线段树、前缀和、RMQ等传统方法相比,此算法简化了操作,提升了效率。

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

一种高效处理无修改区间或树上询问的数据结构(附代码)

https://www.luogu.org/blog/yestoday/mao-shu

一种O(nlogn)+O(1)+O(nlogn)的、通过对分治树的预处理、可以支持无修改树上路径、区间问题的算法

无论能不能重复贡献、能不能具有可减性,只要具有结合律并且可以快速合并(只用合并一次),并且预处理时空消耗不大,

对于许多组询问的问题有很大的优势。

由ImmortalCO喵提出。

 

对于序列和区间查询

预处理:开始先分治时候预处理当前区间每个点到mid的前缀/后缀信息

查询:先长度变成2^k,LCA就是叶子编号的LCP,可以x>>log2[x^y]求出。O(1)定位,然后利用预处理信息合并一次即可。

 

相较于线段树省略了划分成logn区间再合并的麻烦。

相较于前缀和可以处理不可减信息(如gcd)

相较于RMQ可以处理不能重复贡献(如最大子段和)问题

树上

其实这和动态点分治思想异曲同工

可以预处理到logn分治重心路径的信息。

分治树LCA用ST表预处理O(1)查询

然后直接定位之后查询即可了。

 

之所以消掉了logn,因为预处理使得区间、路径可以O(1)拼凑在一起。

通过分治树的结构搞事情。

 

转载于:https://www.cnblogs.com/Miracevin/p/10701277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值