洛谷 P7722 [Ynoi2007] tmpq

发布时间 2023-07-05 15:42:45作者: zltzlt

洛谷传送门

被踩爆了好神的题啊!

转化一下题意,给出三个数组 \(a, b, c\),每次可以单点修改 \(a, b, c\),询问即求 \(b_i = a_j = c_k, 1 \le i < j < k \le r\) 的数量。

发现每种颜色是独立的,故分开单独考虑。设 \(b_i = a_j = c_k = w\)。考虑根号分治。设 \(B = \sqrt{n + m}\)

  • 如果 \(w\) 的出现次数 \(\le B\),直接暴力计算 dp 值,在 \(k\) 处加即可,查询直接查询前缀和,可以用分块平衡复杂度,\(O(1)\) 单点查,\(O(B)\) 查询即可。
  • 如果 \(w\) 的出现次数 \(> B\),这样的数不超过 \(B\) 个,对于每个数维护一个动态 dp,仍然是使用分块维护前缀矩阵积,\(O(B)\) 单点查,\(O(1)\) 查询即可。

你会发现每一处都奇妙地平衡了时间复杂度。因此时间复杂度 \(O((n + m) \sqrt{n + m})\)