[学习笔记]猫树

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

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