莫队小记
普通莫队
将序列分块,将询问按左端点所在块的编号排序。
维护指针
时间复杂度
注意指针变化的顺序(先执行区间变大),以及指针变化与贡献计算的相对顺序。
- 奇偶块排序:相邻的两块中,前一块按照
升序排序,后一块按照 降序排序。
树上莫队使用 dfs 序或 dfn 序转到区间上,具体实现见例题。
带修莫队
在原来的基础上再加入一维修改指针
思考块长
的移动次数: 跨块移动总次数为 ,每两个询问之间 的移动距离为 ,故总移动次数为 。 的移动次数: 跨块移动总次数为 , 不跨块总移动次数为 。 的移动次数,对于 ,一共有 个有效的块,每个块移动 次,故总复杂度为 ( 取到 显然不优,于是令 )。
综上,我们要确定一个
例题
P4462 [CQOI2018] 异或序列
作前缀和,转化为两点异或和为
记
P4396 [AHOI2013] 作业 & P4867 Gty的妹子序列
用树状数组或值域分块维护,时间复杂度
CF877F Ann and Books
即
P3604 美好的每一天
将
P5268 [SNOI2017] 一个简单的询问
将询问差分成
CF375D Tree and Queries
树上莫队,容易想到打在 dfn 序上,就变成简单题了。
SP10707 COT2 - Count on a tree II
这次不能用 dfn 序了,得用 dfs 序,这样不在链上的节点会被计算两次抵消掉。
钦定
CF1479D Odd Mineral Resource
同上题的做法,查询时值域分块。注意一些实现细节。可以开一个栈或队列储存整块里面有用的颜色。也可以开个数组记录整块是否有贡献(但是我这样写 T 飞了)。
还有随机化的
CF1476G Minimum Difference
记
P4689 [Ynoi2016] 这是我自己的发明
发现如果没有操作 1 的话,打到 dfn 序上就是 P5268。对于操作 1,考虑一下换根后每个子树的变化即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?