P6071 『MdOI R1』Treequery

P6071 『MdOI R1』Treequery

分类讨论,设 [l,r][l,r] 的点的 LCA 为 uu:

  • pp 不在 uu 的子树内,答案为 dis⁡(u,p)\operatorname{dis}(u,p)。
  • 否则。
    • 若 pp 子树内有 [l,r][l,r] 的点,则答案为 00,因为路径边集无交。
    • 否则从 pp 开始二分最浅的点 xx 满足 xx 子树内无 [l,r][l,r] 的点,答案即为 dis⁡(fa⁡(x),p)\operatorname{dis}(\operatorname{fa}(x),p)。

自己画图思考就行了。

主席树维护跳点,按 dfs 序加点,判区间是否无点即可,时间复杂度单 log⁡\log。

维护 O(nlog⁡n)−O(1)\mathcal O(n\log n)-\mathcal O(1) LCA。

再 ST 表维护区间 LCA。

故时空复杂度 O(nlog⁡n)\mathcal O(n\log n),注意细节问题。

代码不给了,需要可以找我。

posted @ 2022-07-22 21:14  蒟蒻orz  阅读(45)  评论(0)    收藏  举报  来源