[题目描述]
你学会了FWT变换,你想要将其加强。
这是一个n位的FWT变换,有序列$A_0,A_1,\cdots,A_{2^n-1}$,变换成B序列,满足$B_i=\sum_{j|i}A_j$.
现在要求你在线算出A。
具体而言,每次会给出你一个x,并告知你 $A_x$ 的值,并保证当前 $\forall i|x,A_i$都是已知的。
要求你计算$B_x$的值。
保证依次给出 $2^n$ 个x,且这些x互不相同。
为了保证在线,假设上一个 $B_x$的答案是pre(若还没输入pre为0),$告知的数A_x=告知的数\oplus pre$ .
为了减少输入量,令$L=10^4$ ,初始给出一个序列 $c_0,c_1,\cdots,c_{L-1}$ , 若这是第at个给出的x,则告知的数为 $c_{(at-1)\%L}$
为了减少输出量,输出 $\oplus_{0\leq i<2^n}B_i$ 即可。
易知,最开始的x是0。
上面的操作均在 $mod\ 2^{32}$ 的意义下进行。
[输入格式]
第一行一个数 $n$ .
第二行L个整数,表示 $c$ .
接下 $2^n$ 行,一行一个整数$x$,表示给出$x$的顺序。
[输出格式]
输出
一行一个整数,表示$\oplus_{0\leq i<2^n}B_i$ .
[样例]
见选手目录下bit/bit1.in,bit2.in和bit/bit1.out,bit2.out
[数据范围]
测试点编号 | $n\leq$ | 分值 |
---|---|---|
1 | $20$ | 20 |
2 | $22$ | 35 |
3 | $23$ | 45 |
对于所有测试点,满足$0\leq c_i\leq10^6,0\leq x<2^n$
大样例下载