atcoder#ARC151D. [ARC151D] Binary Representations and Queries

[ARC151D] Binary Representations and Queries

配点 : 700700

問題文

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

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

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

  1. まず、jjNN 桁の 22 進数表現を bN1bN2b0b_{N-1}b_{N-2}\ldots b_0 とおく。また、bN1bN2b0b_{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 で割ったあまりを出力してください。

$N$ 桁の $2$ 進数表現とは?

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

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

制約

  • 1N181 \leq N \leq 18
  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • 0Ai<9982443530 \leq A_i \lt 998244353
  • 0XiN10 \leq X_i \leq N-1
  • Yi{0,1}Y_i \in \lbrace 0, 1\rbrace
  • 入力はすべて整数

入力

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

NN QQ

A0A_0 A1A_1 \ldots A2N1A_{2^N-1}

X1X_1 Y1Y_1

X2X_2 Y2Y_2

\vdots

XQX_Q YQY_Q

出力

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

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

2 2
0 1 2 3
1 1
0 0
2 6 2 5

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

  • j=0j = 0 のとき、b1b0=00,j=2b_1b_0 = 00, j' = 2 です。b11b_1 \neq 1 であるので、加算の手順は行いません。
  • j=1j = 1 のとき、b1b0=01,j=3b_1b_0 = 01, j' = 3 です。b11b_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 です。b00b_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 です。b00b_0 \neq 0 であるので、加算の手順は行いません。

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

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
246895115 904824001 157201385 744260759 973709546 964549010 61683812 205420980