Data Structure

Bitset

HDU6085 Rikka and Candies

题意 : 给出长为 n 的数组 a 和 长为 m 的数组 b,q次询问,询问有多少组 \((i,j)\) 满足 \(a_i\ mod\ b_j=k\)输出答案对 2 取模的值 , 输入的数 \(\le 5e4\)

  • \(a_i\ mod\ b_j=k\) 相当于 \(a_i \ge k,b_j>k\)\(b_j\)\(a_i+k\) 的约数,为方便,认为任何正整数都为 0 的约数。

  • 这里从大到小枚举 k ,记数组 \(c_i\) 为 b 中为 i 的约数,且大于 k 的数的个数对 2 取模的值。每次 k 减小 1 只会有 n/k 次修改, 询问答案即为 \(\sum_{a_i\ge k}{c_{a_i-k}}\), 因此对 a 开桶记录个数对 2 取模的值, 询问时计算桶右移 k 为后与 c 异或, 用 bitset 可以 \(O(n/w)\) 单次询问.

  • 时间复杂度 \(O(n\log n+nk/w)\).

posted @ 2022-04-07 20:58  Aleksee  阅读(70)  评论(0)    收藏  举报