普通莫队学习笔记
莫队算法主要用于可以离线的区间询问回答。
引子
考虑一个这样的问题:假设没有事先求前缀和,你知道了数组第
显然直接暴力的去把第
莫队就是这样一种处理询问的方式,通过排序,使得两两询问之间的交集尽可能的大。
如何排序
字母 含义 某一询问的左端点 某一询问的右端点 块长 数字个数 询问规模
如何排序使得区间交集尽可能大?
根据分块的思想,莫队按照
因为
对于相同组,
当
code
一次排序 + 四遍
注意 ++l
,--l
,++r
,--r
的顺序排列仅有
口诀:先加后减,先左后右,先小后大
int n, block
struct query {
int l, r, id;
bool operator<(query x) {
return l / block == x.l / block ? (r == x.r ? 0 : ((l / block) & 1) ^ (r < x.r)) : l < x.l;
}
} q[N];
// update nowans
void move() {
//...
}
void mo() {
block = int(ceil(pow(n, 0.5)));
sort(q + 1, q + n + 1);
for (int i = 1; i <= n; ++i) {
query Q = q[i];
while (l < q.l) move(l++, 1);
while (l > q.l) move(--l, 1);
while (r < q.r) move(++r, 1);
while (r > q.r) move(--r, 1);
}
}
应用
区间
首先莫队把询问离线排序后,我们可以很简单的维护出一个桶。
每次暴力维护移动的时候,就令
考虑对于桶进行分块。每
维护好这个大的桶后,我们就可以在
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!