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])
    考虑根号分治,大于根号的直接暴力跳贡献
    小于根号的,分开考虑贡献(不放在莫队里)

好麻烦,先咕咕咕着

posted @ 2021-09-03 16:39  lahlah  阅读(62)  评论(0编辑  收藏  举报