莫队学习笔记

发布时间 2023-07-10 12:41:31作者: 383494

这是一篇模仿算导的学习笔记/题解。

例题:P1494

给定一个长为 \(n\) 的数组 \(a\)\(m\) 个询问(有序数对)\(b_i = (l_i,r_i)\),询问允许离线,对每个询问 \((l, r)\) 求出满足 \(l \le i \lt j \lt r \wedge a_i=a_j\) 的数对 \((i,j)\) 数量.

  1. 证明:若数 \(x\)\(a\) 数组下标为 \([l, r)\) 的部分中出现次数为 \(c_x\),则询问 \((l, r)\) 的答案为 $$\sum \limits_{c_x \ge 2} \dbinom{c_x}{2}$$

  2. 证明:\(\dbinom{x+1}{2}-\dbinom{x}{2}=x\).

  3. 若已知 \([l, r)\) 区间的 \(c_x\) 和答案,设计一种方法,在 \(\Theta(1)\) 的时间内得到 \([l, r+1)\)\([l, r-1)\)\([l-1, r)\)\([l+1, r)\) 区间的相关信息。

  4. 对于询问 \(b_i\)\(b_j\),从 \(b_i\) 每次 \(\Theta(1)\) 移动端点到 \(b_j\) 的最坏复杂度是多少?对于 \(m\) 个询问,每次暴力移动的最坏总复杂度是多少?

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

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

  7. \(B\) 取何值时,总复杂度最小?(提示:\(p,q\) 为正常数时 \(\dfrac{p}{x}+qx \ge 2 \sqrt{pq}\),当且仅当 \(\dfrac{p}{x}=qx\) 时取等)