[学习笔记] 莫队

一、普通莫队

莫队是一种基于分块的算法,由莫队提出(orz)。

莫队可以解决一类查询序列区间信息的题。

可以使用该算法的 前提 是维护的信息必须可以在 O(1)(如果用 map / set 可以带 log,或者优化成 O(1))内将 [l,r] 的答案扩展到 [l1,r],[l+1,r],[l,r1],[l,r+1]

  • 将序列分块,并将所有询问离线。然后将左端点所在的块的编号作为第一关键字,右端点作为第二关键字,将询问排序。

  • qi 为第 i 个询问,m 为询问个数,那么我们暴力的从 q1 改到 q2,从 q2 改到 q3,一直改到 qm

  • 分析时间复杂度。设块长为 L,假定扩展区间复杂度为 O(1);左端点在一个块内的询问,移动最多 n 次,有 nL 块,所以这部分的复杂度为 O(n2L),因为这样每次改可能跨越块,所以这部分的复杂度为 O(mL),总复杂度 O(n2L+mL)。我们要让这个式子尽可能小,所以要让这两项相等,即 n2L=mL解得 L=nm,时间复杂度 O(nm)

posted @   CountingGroup  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示