[题目描述]
你学会了FWT变换,你想要将其加强。
这是一个n位的FWT变换,有序列A0,A1,⋯,A2n−1,变换成B序列,满足Bi=∑j|iAj.
现在要求你在线算出A。
具体而言,每次会给出你一个x,并告知你 Ax 的值,并保证当前 ∀i|x,Ai都是已知的。
要求你计算Bx的值。
保证依次给出 2n 个x,且这些x互不相同。
为了保证在线,假设上一个 Bx的答案是pre(若还没输入pre为0),告知的数Ax=告知的数⊕pre .
为了减少输入量,令L=104 ,初始给出一个序列 c0,c1,⋯,cL−1 , 若这是第at个给出的x,则告知的数为 c(at−1)%L
为了减少输出量,输出 ⊕0≤i<2nBi 即可。
易知,最开始的x是0。
上面的操作均在 mod 232 的意义下进行。
[输入格式]
第一行一个数 n .
第二行L个整数,表示 c .
接下 2n 行,一行一个整数x,表示给出x的顺序。
[输出格式]
输出
一行一个整数,表示⊕0≤i<2nBi .
[样例]
见选手目录下bit/bit1.in,bit2.in和bit/bit1.out,bit2.out
[数据范围]
测试点编号 | n≤ | 分值 |
---|---|---|
1 | 20 | 20 |
2 | 22 | 35 |
3 | 23 | 45 |
对于所有测试点,满足0≤ci≤106,0≤x<2n
大样例下载