专栏文章
回滚莫队
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miprfe99
- 此快照首次捕获于
- 2025/12/03 16:43 3 个月前
- 此快照最后确认于
- 2025/12/03 16:43 3 个月前
滚回莫队
引入:
普通莫队在查询转移时,会出现无法快速实现删除或增加操作的情况。
分为增加型,减少型
复杂度一样
增加型
专门解决只能快速增加元素,不能高效删除元素
通过分块,排序和回滚操作,避免了删除操作,优化到
使用场景
- 仅支持快速增加(如添加元素时维护答案)
- 无法高效删除(删除后无法快速更新答案)
- 离线查询,可提前排序
核心思想
- 分块,分为大小为 的块
- 排序查询
- 按左端点所在块号升序排序
- 同一块内的查询,按右端点升序排序(确保右指针单调递增)
- 回滚操作
- 右指针始终向右扩展(只增加元素)。
- 左指针在同一块内向左扩展,但每次查询后回滚左指针的修改,避免删除操作。
- 分块与排序
- 分块大小
- 排序规则
- 第一关键字:左端点所在块号(升序)
- 第二关键字:右端点(升序)
- 初始化指针
- 维护当前区间,初始为 (块边界右侧)。
- 记录每个块的右端点。
- 处理每个查询
- 假设当前查询为
- 情况1: 和 在同一块内,暴力求解:遍历,统计答案。
- 情况2:和不在同一块
- (1)扩展右指针:将移动到,每一步调用\维护当前最大值
- (2)临时扩展左指针:从cur_l-1向左扩展到,记录临时增加的元素及其计数(不修改全局计数)
- (3)计算临时答案:利用临时扩展的左指针区间,计算当前最大值。
- (4)回滚左指针:撤销临时扩展的左指针修改,恢复 到块边界右侧。
- 假设当前查询为
删除型
- 解决快速删除,不能高效增加
实现
- 分块,分为大小为 的块
- 排序查询
- 按右端点所在块号升序排序
- 同一块内的查询,按左端点降序排序(确保左指针单调递增)
- 回滚操作
- 左指针始终向左扩展(只删除元素)。
- 右指针在同一块内向右扩展,但每次查询后回滚右指针的修改,避免增加操作。
- 分块与排序
- 分块大小
- 排序规则
- 第一关键字:右端点所在块号(升序)
- 第二关键字:左端点(降序)
- 初始化指针
- 维护当前区间,初始为 (块边界左侧)。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...