莫队学习笔记
1|0莫队
莫队是一种常见的离线处理区间查询问的方法。
莫队的思想是把序列分块,然后把询问按照左端点所在块为第一关键字,右端点为第二关键字排序,然后处理询问,维护指针
关于复杂度。假设指针移动的复杂度是
关于常数,莫队的常数很小,而且可以用奇偶分块减小一半的常数。
1|1P1972 [SDOI2009] HH的项链
题意:区间数颜色。
思路:把询问离线,然后跑莫队,用一个数组维护当前区间内每个数的出现次数,移动指针时,如果是加入一个数且这个数的出现次数是 0,就说明颜色数增加了 1;如果删除一个数且删除后出现次数为 0,那么颜色数就减少了 1。
1|2「JOISC 2014 Day1」历史研究
题意:有序列
思路:回滚莫队模板题。
首先考虑用莫队,但是我们发现在删除时不好维护最大值,那就想办法不删除,这就是回滚莫队。具体地,对于莫队指针的左右端点,右端点还是和普通莫队一样,每次往右移,然后记录下当前值。左端点就不太一样了,每处理完一次询问就回到左端点所在的段的末尾,然后令答案回到之前记录的值,这样就可以保证在不删除的情况下答案正确。
1|3P4887 【模板】莫队二次离线(第十四分块(前体))
题意:求区间中两个数异或值中有
思路:莫队二次离线。
以前因为莫队二离是个很高端的东西,现在来看发现还好。
本质是把莫队端点移动时查询答案的操作再离线一遍,然后用一遍扫描线来计算。难点在于这样拆出来的询问有
以右端点的移动为例,假设右端点从
1|4P3674 小清新人渣的本愿
题意:求区间是否可以选择两个数满足加和/差/乘积为
思路:分开维护
对于“+”“-”,可以直接莫队维护区间值域 bitset。
对于“*”,可以直接枚举因数,再判断是否有
1|5P4688 [Ynoi2016] 掉进兔子洞
题意:求 3 个区间的交的大小。
思路:做法还好,但是很难写。
首先,容易想到莫队 +bitset,但是这道题中同颜色可以有多个,不能直接用 bitset,要给每个颜色预留这个颜色大小的区域。
然后就是空间问题,需要把询问分3组来卡空间。
1|6P4689 [Ynoi2016] 这是我自己的发明
题意:换根,求给出
思路:首先,如果在 dfn 序上进行操作,那么每个点的子树就对应着1或2个区间。
记
考虑两种极端的情况,
转成差分后,就可以用莫队来求出每个区间的答案了。
1|7P8078 [WC2022] 秃子酋长
题意:求区间排序后相邻的数在原序列中的位置的差的绝对值之和。
思路:终于来写秃子酋长了,上次看还是在WC的时候。
其实就是只删除莫队的板子。
考虑莫队,那么如果用常规莫队写法的话,加入一个点是
其实跟回滚莫队是差不多的。
1|8P9340 [JOISC 2023 Day3] Tourism
题意:给出一颗
思路:做了秃子酋长才发现这题好板。
用只删除莫队,然后按
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18015275.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)