loj#P3073. 「2019 集训队互测 Day 2」序列
「2019 集训队互测 Day 2」序列
题目描述
小 J 用计算机生成了 个长为 的序列(每个序列的元素从 到 标号),具体生成方式如下:
对于每个序列,小 J 先将所有元素置为 ,再指定两个生成参数 和 ,对序列进行如下操作:
for (i = x; i > 0; i -= lowbit(i))
for (j = i - lowbit(i); j < i; j++)
A[j] += i * (i ^ v);
其中 表示该序列, 表示 在二进制下最低非零位的值,如 $\mathrm{lowbit}(20) = \mathrm{lowbit}\left(\left(10100\right)_2\right) = \left(100\right)_2 = 4$。
接下来小 M 会进行 次询问,每次询问有两个参数 和 ,请你回答前 个序列 卷积的第 项,即设前 个序列为 ,求( 表示二进制按位异或运算):
$$\sum_{{\array{p_1 \oplus p_2 \oplus \dots \oplus p_c = d \\ 0 \le p_1, p_2, \dots, p_c < m}}}{\prod_{i=1}^{c}{S_{i,p_i}}} $$答案对 取模。
输入格式
输入第一行包含三个整数 、 和 。
接下来 行,每行包含两个整数 和 ,依次表示每个序列的生成参数。
接下来 行,每行包含两个整数 和 ,依次表示每次询问的参数。
输出格式
对于每次询问,输出一行一个整数,表示所求的答案。
5 4 4
1 2
2 3
4 3
4 5
2 1000000000
3 2
3 1
1 0
5 2
336
336
3
818435035
数据范围与提示
对于全部数据:
- ,,;
- 所有序列满足 ,;
- 每次询问满足 ,。
各子任务限制如下:
- 子任务 ( 分):,,;
- 子任务 ( 分):,,;
- 子任务 ( 分):,;
- 子任务 ( 分):;
- 子任务 ( 分):无特殊限制。