题解 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)$。

posted @ 2023-08-03 09:25  Terac  阅读(16)  评论(0)    收藏  举报  来源