ABC 293 G 题题解 —— 莫队
有关数据
| \(\texttt{Time Limit}\) | \(\texttt{Memory Limit}\) | \(\texttt{Difficulty}\) |
|---|---|---|
| \(\color{green}{\texttt{3 sec}}\) | \(\color{red}{\texttt{1024 MB}}\) | \(\color{blue}{\texttt{1753}}\) |
题目大意
你有一个长度为 \(n\) 的序列 \(\{a_1,a_2,a_3,\dots,a_n\}\)
现在给你 \(q\) 次询问,对第 \(p\) 次询问有 \((l_p, r_p)\)
输出三元组 \((i,j,k)\) 的数量,使得:
- \(l_p \leq i < j < k \leq r_p\)
- \(a_i = a_j = a_k\)
数据范围
- \(1 \leq n \leq 2 \times 10^5\)
- \(1 \leq q \leq 2 \times 10^5\)
- \(1 \leq a_i \leq 2 \times 10^5\)
- \(1 \leq l_p, r_p \leq 2 \times 10^5\)
题目分析
这道题是一道莫队的板子题。(弘扬中国文化是吧)
如果不会莫队的可以左转学习
由于这题没有强制在线,所以我们可以考虑莫队。
这道题目需要求三元组的范围使得这三项在区间里且三项相等。在离线操作之后,我们就只需知道端点向前或者向后移动时对答案的影响即可。如果区间左端点新添加了一个数 \(a_c\),那么答案就会 \(+=\) 包含 \(c\) 的三元组,也就是 \((c, ?, ?)\),设 \(x\) 为 \(a_c\) 的出现次数,则贡献为 \(\frac{(x-1)\times x}{2}\)。此时,问题便转化成了求区间内 \(a_c\) 的出现次数。这就十分容易统计了。
于是这道题就轻松了许多。

浙公网安备 33010602011771号