#3589. 环形传送带的校验值 (conveyorchecksum)

环形传送带的校验值 (conveyorchecksum)

题目描述

实验室里有一条首尾相接的传送带,上面依次放着 nn 个数据盒。工程师把当前从左到右看到的序列记为 a1,a2,…,ana_1,a_2,\ldots,a_n,并定义它的校验值为相邻两个数据盒编号异或后的总和:

传送带每向右转动一次,最右端的数据盒会移动到最左端。例如 [4, 5, 1, 2] 右转一次后变为 [2, 4, 5, 1]。

现在会依次进行 mm 轮操作。第 ii 轮会让传送带连续右转 bib_i 次,且每一轮都建立在上一轮结束后的状态上。请输出初始状态以及每轮结束后的校验值。

输入格式

在文件 conveyorchecksum.in 中读入。

第一行输入两个正整数 n,mn,m,表示序列长度和操作轮数。

第二行输入 nn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

接下来输入 mm 个正整数 b1,b2,…,bmb_1,b_2,\ldots,b_m。这些数可以分布在一行或多行中。

输出格式

在文件 conveyorchecksum.out 中输出。

输出 m+1m+1 个整数,用空格隔开。

第一个整数表示初始序列的校验值,之后第 ii 个整数表示第 ii 轮操作结束后的校验值。

样例

样例输入 #1

5 3
1 2 3 4 5
1 1 2

样例输出 #1

12 15 9 13

样例输入 #2

5 5
10 13 2 5 6
4
1
5
1
2

样例输出 #2

32 37 32 32 41 29

数据范围

  • 对于 20%20\% 的数据,满足 n≤105,m=0n \le 10^5,m=0。
  • 对于另外 40%40\% 的数据,满足 bi≤n≤103,m≤5b_i \le n \le 10^3,m \le 5。
  • 对于 100%100\% 的数据,满足 2≤n≤1052 \le n \le 10^5,0≤m,ai,bi≤1050 \le m,a_i,b_i \le 10^5。