P6071 『MdOI R1』Treequery

P6071 『MdOI R1』Treequery

分类讨论,设 [l,r][l,r] 的点的 LCAuu

  • 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(nlogn)O(1)\mathcal O(n\log n)-\mathcal O(1) LCA

ST 表维护区间 LCA

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

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

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