莫队学习笔记

这是一篇模仿算导风格的学习笔记。

my cnblog

普通莫队

例题:P1494

给定一个长为 n 的数组 am 个询问(有序数对)bi=(li,ri),询问允许离线,对每个询问 (l,r) 求出满足 li<j<rai=aj 的数对 (i,j) 数量.

  1. 证明:若数 xa 数组下标为 [l,r) 的部分中出现次数为 cx,则询问 (l,r) 的答案为 cx2(cx2)

  2. 若已知 [l,r) 区间的 cx 和答案,设计一种方法,在 Θ(1) 的时间内得到 [l,r+1)[l,r1)[l1,r)[l+1,r) 区间的相关信息。(提示:(x+12)(x2)=x

  3. 对于询问 bibj,从 bi 每次 Θ(1) 移动端点到 bj 的最坏复杂度是多少?对于 m 个询问,每次暴力移动的最坏总复杂度是多少?

  4. 若将 m 个询问按某个端点(lr)排序,则最坏总复杂度是多少?

  5. 设计一种方法,在一个端点有序时使另一个端点相对集中。分析排序后暴力转移端点的时间复杂度。(提示:将这些询问分成 mB 块,使每块内某个端点之差不超过 B

  6. B 取何值时,总复杂度最小?(提示:p,q 为正数时 px+qx2pq,当且仅当 px=qx 时取等)

二次离线莫队

例题:P4887

珂朵莉给了你一个长为 n 的序列 a,每次查询给一个区间 [l,r],查询 li<jr,且 aiaj 的二进制表示下有 k1 的二元组 (i,j) 的个数。 是指按位异或。

  1. 右端点从 r 移动到 r(r>r) 时,答案的变化量是多少?对左端点和 r<r 的情况同样分析.

  2. 把一个点 x[l,r) 的贡献(一个点在 [x,x],另一个点在 [l,r) 的点对数量)拆成 x[0,r) 的贡献减 x[0,l) 的贡献;设计一种预处理的方法,在 Θ(1) 时间内计算 r[0,r) 的贡献.

  3. 对于 r 移动中 r[0,l) 的贡献,将全程总贡献表示为一个区间对另一区间的贡献.

  4. 对于 [r,r)[0,l) 的贡献,如何暂存这些“离线询问”以便一起回答?(提示:[r,r) 区间可能有 O(n2) 个;[0,l) 区间只有 Θ(n) 个)

  5. 设计一种方法回答上一问暂存的“询问”.(提示:考虑从 [0,l) 扩展到 [0,l+1),一共会扩展 Θ(n) 次;单点对区间的询问有 Ω(m) 个,如何安排转移的询问的复杂度?)

posted @   383494  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示