#arc151d. [arc151_d]Binary Representations and Queries

[arc151_d]Binary Representations and Queries

問題文

長さ 2N2^N の整数列 A=(A0,A1,ldots,A2N1)A = (A_0, A_1, \\ldots, A_{2^N-1}) が与えられます。

また、QQ 個のクエリが与えられます。 i=1,2,ldots,Qi = 1, 2, \\ldots, Q について、ii 番目のクエリでは 22 つの整数 Xi,YiX_i, Y_i が与えられ、下記の操作を行います。

j=0,1,2,ldots,2N1j = 0, 1, 2, \\ldots, 2^N-1 の順に下記の手順を行う。

  1. まず、jjNN 桁の 22 進数表現を bN1bN2ldotsb0b_{N-1}b_{N-2}\\ldots b_0 とおく。また、bN1bN2ldotsb0b_{N-1}b_{N-2}\\ldots b_0 から bXib_{X_i} を反転( 00 ならば 11 に、11 ならば 00 に変更)させて得られる 22 進数表現によって表される整数を jj' とおく。

  2. そして、bXi=Yib_{X_i} = Y_i ならば、AjA_{j'}AjA_j の値を加算する。

すべてのクエリを入力で与えられる順番に実行した後の AA の各要素を 998244353998244353 で割ったあまりを出力してください。

NN 桁の 22 進数表現とは?

非負整数 XX (0leqX<2N0 \\leq X < 2^N) の NN 桁の 22 進数表現とは、0011 のみからなり下記の条件を満たす唯一の、長さ NN の列 bN1bN2ldotsb0b_{N-1}b_{N-2}\\ldots b_0です。

  • sumi=0N1bicdot2i=X\\sum_{i = 0}^{N-1} b_i \\cdot 2^i = X

制約

  • 1leqNleq181 \\leq N \\leq 18
  • 1leqQleq2times1051 \\leq Q \\leq 2 \\times 10^5
  • 0leqAilt9982443530 \\leq A_i \\lt 998244353
  • 0leqXileqN10 \\leq X_i \\leq N-1
  • Yiinlbrace0,1rbraceY_i \\in \\lbrace 0, 1\\rbrace
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN QQ A0A_0 A1A_1 ldots\\ldots A2N1A_{2^N-1} X1X_1 Y1Y_1 X2X_2 Y2Y_2 vdots\\vdots XQX_Q YQY_Q

出力

i=0,1,ldots,2N1i = 0, 1, \\ldots, 2^N-1 について、すべてのクエリを実行した後の AiA_i998244353998244353 で割ったあまり AiA'_i を、下記の形式にしたがって空白区切りで出力せよ。

A0A'_0 A1A'_1 ldots\\ldots A2N1A'_{2^N-1}


入力例 1

2 2
0 1 2 3
1 1
0 0

出力例 1

2 6 2 5

11 番目のクエリに対する操作は次の通りです。

  • j=0j = 0 のとき、b1b0=00,j=2b_1b_0 = 00, j' = 2 です。b1neq1b_1 \\neq 1 であるので、加算の手順は行いません。
  • j=1j = 1 のとき、b1b0=01,j=3b_1b_0 = 01, j' = 3 です。b1neq1b_1 \\neq 1 であるので、加算の手順は行いません。
  • j=2j = 2 のとき、b1b0=10,j=0b_1b_0 = 10, j' = 0 です。b1=1b_1 = 1 であるので、A0A_0A2A_2 の値を加算します。その結果、A=(2,1,2,3)A = (2, 1, 2, 3) となります。
  • j=3j = 3 のとき、b1b0=11,j=1b_1b_0 = 11, j' = 1 です。b1=1b_1 = 1 であるので、A1A_1A3A_3 の値を加算します。その結果、A=(2,4,2,3)A = (2, 4, 2, 3) となります。

22 番目のクエリに対する操作は次の通りです。

  • j=0j = 0 のとき、b1b0=00,j=1b_1b_0 = 00, j' = 1 です。b0=0b_0 = 0 であるので、A1A_1A0A_0 の値を加算します。その結果、A=(2,6,2,3)A = (2, 6, 2, 3) となります。
  • j=1j = 1 のとき、b1b0=01,j=0b_1b_0 = 01, j' = 0 です。b0neq0b_0 \\neq 0 であるので、加算の手順は行いません。
  • j=2j = 2 のとき、b1b0=10,j=3b_1b_0 = 10, j' = 3 です。b0=0b_0 = 0 であるので、A3A_3A2A_2 の値を加算します。その結果、A=(2,6,2,5)A = (2, 6, 2, 5) となります。
  • j=3j = 3 のとき、b1b0=11,j=2b_1b_0 = 11, j' = 2 です。b0neq0b_0 \\neq 0 であるので、加算の手順は行いません。

以上より、すべてのクエリを実行した後の AA(2,6,2,5)(2, 6, 2, 5) です。


入力例 2

3 10
606248357 338306877 919152167 981537317 808873985 845549408 680941783 921035119
1 1
0 0
0 0
0 0
0 1
0 1
0 1
2 0
2 0
2 0

出力例 2

246895115 904824001 157201385 744260759 973709546 964549010 61683812 205420980