G - Super 累積 XOR
解説
/
/
実行時間制限: 4 sec / メモリ制限: 1024 MiB
配点 : 100 点
問題文
N 個の整数からなる数列 A = (A_1, A_2, \dots, A_N) が与えられます。
以下の操作を K 回行った後の A を出力してください。
- i=1,2, \dots ,N に対して一斉に A_i を A_1 \oplus A_2 \oplus \dots \oplus A_i に置き換える。
ただし、 \oplus はビットごとの排他的論理和を表します。
制約
- 1 \le N \le 2 \times 10^5
- 1 \le K \le 10^{18}
- 0 \le A_i < 2^{30}
- 入力はすべて整数
部分点
追加の制約 N \le 1000 を満たすデータセットに正解した場合は 1 点が与えられる。
入力
入力は以下の形式で標準入力から与えられます。
N K A_1 A_2 \dots A_N
出力
上述の操作を K 回行った後の A=(A_1,A_2,\dots,A_N) の各要素を、順に空白区切りで出力してください。
入力例 1
3 2 1 2 3
出力例 1
1 2 2
はじめ、 (A_1, A_2, A_3)=(1,2,3) です。
1 回目の操作を行うと (A_1, A_2, A_3)=(1,1 \oplus 2,1 \oplus 2 \oplus 3)=(1,3,0) となります。
2 回目の操作を行うと (A_1, A_2, A_3)=(1,1 \oplus 3,1 \oplus 3 \oplus 0)=(1,2,2) となります。
入力例 2
10 3141592653589793 528994566 21013803 220742658 357578426 605624719 350507118 731879815 393165536 215218511 161335641
出力例 2
528994566 516387885 334442543 113182357 581312282 910315380 501077747 179498003 107025756 268229637