luogu P5398 [Ynoi2018] GOSICK
https://www.luogu.com.cn/problem/P5398
一眼二次离线莫队
考虑l向左移动
∑
[
a
[
i
]
∣
a
[
l
]
]
+
∑
[
a
[
l
]
∣
a
[
i
]
]
\sum[a[i]|a[l]]+\sum[a[l]|a[i]]
∑[a[i]∣a[l]]+∑[a[l]∣a[i]]
约数和倍数分开考虑
- 考虑倍数
记 c n t [ i ] cnt[i] cnt[i]为 a [ i ] a[i] a[i]的倍数个数
差分一下,变成 ( r , a [ l ] ) − ( l , a [ l ] ) (r,a[l])-(l,a[l]) (r,a[l])−(l,a[l]),套二次离线版子,右边直接 O ( n d ( n ) ) O(nd(n)) O(nd(n))算(新加一个数,把它的约数全部+1),
左边离线下来算也可以算 - 考虑约数
记 c n t [ i ] cnt[i] cnt[i]表示 a [ i ] a[i] a[i]的约数个数
差分一下,变成 ( r , a [ l ] ) − ( l , a [ l ] ) (r,a[l])-(l,a[l]) (r,a[l])−(l,a[l])
考虑根号分治,大于根号的直接暴力跳贡献
小于根号的,分开考虑贡献(不放在莫队里)
好麻烦,先咕咕咕着