专栏文章
NOIP2024 T4
P11364题解参与者 15已保存评论 16
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @miqr91t1
- 此快照首次捕获于
- 2025/12/04 09:26 3 个月前
- 此快照最后确认于
- 2025/12/04 09:26 3 个月前
一个硬维护的做法,居然没人是这样做的(
特判掉 的询问,对于 ,区间 LCA 的深度为 。(证明考虑一下虚树,这里不再赘述)
那么问题可以转化为:有一个序列 ,询问 ,求 。
这可以看作:把 数组进行 次 的操作,然后求 的区间最大值。
把询问按照 排序,问题转化为:
- 把 数组进行 的操作,操作完长度减一
- 求 数组区间最大值
假设 的所有元素不同,否则给 的相同元素也钦定大小顺序。
考虑直接维护 中的每个值域连续段。每次进行 的操作后,每个连续段长度可能变化 。
如果连续段的值比两边都小,长度会加 ;比两边都大,长度会减 ;否则长度不变。
具体的:设 为 这个段左边和右边的连续段。考虑设 ,在每一次变化后, 这个值的连续段长度加上 。(如果 不存在则设 )
如果一个连续段长度变为 ,则这个连续段要删掉,并且更新左边、右边连续段的 。
可以在线段树上维护每个连续段的 和长度,以及当前 的连续段的长度最小值,用链表维护删除。
查询在线段树上二分一下,修改需要打标记,然后不断删除长度变为 的连续段。
时间复杂度 。
相关推荐
评论
共 16 条评论,欢迎与作者交流。
正在加载评论...