专栏文章
P4198 楼房重建 题解
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqlgvpe
- 此快照首次捕获于
- 2025/12/04 06:44 3 个月前
- 此快照最后确认于
- 2025/12/04 06:44 3 个月前
题意可以转化为一个数列 {}, 次单点修改,每次全局查询一个 {} 的子序列长度(构造方式为从序列左到右选数,后面选的大于前面选的,能选就选。第一项为 )。, 同阶 在双log下通过。
由于询问区间固定,且单点修改,考虑线段树维护。设一段区间的答案独立,单点修改update时,如果目前在一个节点 ,我们已经处理了子区间的答案,那么这段区间的答案一定是由左区间答案+以左区间值max为首项之后在右区间乱选的长度(不加首项),考虑解决右部分(使用函数work()),假设目前处理到 节点,那么如果左区间max 小于等于首项,那么没用,直接递归右儿子。否则注意到首项不会影响右区间在 now 管辖的区间下的答案 (ans(now)-ans(now<<1)),直接递归左区间计算后返回右加左答案就可以了。
关于时间复杂度分析,在 update 时至多遍历 log 个节点,在每个节点又会 work 一次,每次 work O(log), 因此单点修改 O( ),于是就可以通过了。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...