专栏文章

题解:P3968 [TJOI2014] 电源插排

P3968题解参与者 2已保存评论 3

文章操作

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

当前评论
3 条
当前快照
1 份
快照标识符
@mipjw7gg
此快照首次捕获于
2025/12/03 13:12
3 个月前
此快照最后确认于
2025/12/03 13:12
3 个月前
查看原文
区间问题,优先考虑线段树,O(qlogn)O(q \log n) 的时间复杂度可以承受。
具体的,我们维护五条信息:
  • 区间内被使用插排个数 usedused
  • 区间内的左端最长连续空插排 lmxlmx
  • 区间内的右端最长连续空插排 rmxrmx
  • 区间内的最长连续空插排 mxmx
  • 区间内的最长连续空插排的中间位置 mm
pushup 中,usedused 可以直接加,lmx,rmx,mx,mlmx,rmx,mx,m 套路地更新即可。
对于同学的到来 / 离去,我们使用一个 map 存储其插排的位置并进行单点修改即可。
但是,普通线段树一般需要开 4N4N 空间,但此题无法承受,于是我们使用动态开点线段树即可。
值得注意的是,因为同学们总会选右边的,所以 pushup 时需要从右至左地更新 mx,mmx,m,具体见代码
综上,本题让我们学会了线段树处理区间问题的常见思路(维护 lmx,rmxlmx,rmx),以及通过使用动态开点线段树节省空间。

评论

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

正在加载评论...