专栏文章

题解:P11364 [NOIP2024] 树上查询

P11364题解参与者 3已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@miqxruhu
此快照首次捕获于
2025/12/04 12:28
3 个月前
此快照最后确认于
2025/12/04 12:28
3 个月前
查看原文
首先按照线段树结构分治。那么只要算跨过中点的答案。
注意到跨过中点的区间 LCA 一定是 LCA(mid,mid+1)\texttt{LCA}(mid,mid+1) 的祖先,可以先求出 LCA(i,,mid+1),LCA(mid,,i)\texttt{LCA}(i,\cdots,mid+1),\texttt{LCA}(mid,\cdots,i) ,然后双指针得出 O(len)O(len) 个可能的区间更新答案。(求 LCA 可以使用 dfs 序做到 O(nlogn)O(1)O(n\log n)-O(1),但是直接树剖求就是均摊正确的了,常数还小/fn。)
注意到如果答案不在这里的话一定顶到了左右端点,使用自己喜欢的方法更新一下即可。例如找到 dfs 序最小和最大值取 LCA。
对于完全包含当前这个区间的情况,只要把小区间长度为 i 的时候的答案记录下来即可,可以用这个区间的 O(len)O(len) 个答案和左右的答案合并。
按照线段树的分析可以得到时空复杂度 O(nlogn)O(n\log n)
代码暂时没有。

评论

3 条评论,欢迎与作者交流。

正在加载评论...