题解 P5398 [Ynoi2018] GOSICK
前置知识:莫队二次离线。
假设值域与 $n$ 同阶。
莫队二次离线后,问题转化为一段前缀中有多少个数是 $x$ 的因数和倍数。$O(n)$ 次加点,$O(n\sqrt m)$ 次查询。
考虑加入 $x$,当 $x$ 作为询问中的倍数时,只需暴力把 $x$ 的因数位置修改即可。因为 $[1,5\times 10^5]$ 中一个数的因数最多只有 $200$ 个,复杂度有保证。
当 $x$ 作为询问中的因数时,考虑根号分治。
-
若 $x> B$,暴力修改 $x$ 的倍数,$O(\frac{n^2}{B})$。
-
若 $x<B$,考虑对每个 $x$ 处理,对原问题考虑,二次离线后,问题是有多少 $i\in[l,r],j\in[L,R]$ 满足 $a_i|a_j$,所以只用求 $[l,r]$ 中 $x$ 的个数和 $[L,R]$ 中 $x$ 的倍数个数即可,前缀和计算,$O(nB)$。
取 $B=\sqrt n$,总时间复杂度 $O(n\sqrt n+n\sqrt m)$,空间复杂度 $O(n)$。

浙公网安备 33010602011771号