Loading docs/ds/segment.md +69 −68 Original line number Diff line number Diff line Loading @@ -518,8 +518,6 @@ int main() ## 拓展 - 猫树 [参见immotalCO大爷的博客](http://immortalco.blog.uoj.ac/blog/2102) 众所周知线段树可以支持高速查询某一段区间的信息和,比如区间最大子段和,区间和,区间矩阵的连乘积等等 但是有一个问题在于普通线段树的区间询问在某些毒瘤的眼里可能还是有些慢了 Loading Loading @@ -576,7 +574,7 @@ int main() 此时我们发现线段树上两个节点的 lca 编号,就是两个节点二进制编号的 lcp lcp实在是不难求,x和y的二进制下lcp=x>>log[x^y] lcp 实在是不难求,x 和 y 的二进制下 `lcp=x>>log[x^y]` 所以我们预处理一个 log 数组即可轻松完成求 lca 的工作 Loading @@ -584,3 +582,6 @@ lcp实在是不难求,x和y的二进制下lcp=x>>log[x^y] 由于建树的时候涉及到求前缀和和求后缀和,所以对于线性基这种虽然合并是 $O(log^2n)$ 但是求前缀和却是 $O(nlogn)$ 的信息,使用猫树可以将静态区间线性基从 $O(nlog^2n+mlog^3n)$ 优化至 $O(nlog^2n+mlog^2n)$ 的复杂度 ### 参考 [immotalCO 大爷的博客](http://immortalco.blog.uoj.ac/blog/2102) Loading
docs/ds/segment.md +69 −68 Original line number Diff line number Diff line Loading @@ -518,8 +518,6 @@ int main() ## 拓展 - 猫树 [参见immotalCO大爷的博客](http://immortalco.blog.uoj.ac/blog/2102) 众所周知线段树可以支持高速查询某一段区间的信息和,比如区间最大子段和,区间和,区间矩阵的连乘积等等 但是有一个问题在于普通线段树的区间询问在某些毒瘤的眼里可能还是有些慢了 Loading Loading @@ -576,7 +574,7 @@ int main() 此时我们发现线段树上两个节点的 lca 编号,就是两个节点二进制编号的 lcp lcp实在是不难求,x和y的二进制下lcp=x>>log[x^y] lcp 实在是不难求,x 和 y 的二进制下 `lcp=x>>log[x^y]` 所以我们预处理一个 log 数组即可轻松完成求 lca 的工作 Loading @@ -584,3 +582,6 @@ lcp实在是不难求,x和y的二进制下lcp=x>>log[x^y] 由于建树的时候涉及到求前缀和和求后缀和,所以对于线性基这种虽然合并是 $O(log^2n)$ 但是求前缀和却是 $O(nlogn)$ 的信息,使用猫树可以将静态区间线性基从 $O(nlog^2n+mlog^3n)$ 优化至 $O(nlog^2n+mlog^2n)$ 的复杂度 ### 参考 [immotalCO 大爷的博客](http://immortalco.blog.uoj.ac/blog/2102)