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

被折叠的 条评论
为什么被折叠?



