#ARC151D. 二进制表示与查询

二进制表示与查询

二进制表示与查询

时间限制:2s
空间限制:512MB

题目描述

给定长度为 2N2^N 的整数序列 A=(A0,A1,…,A2N−1)A=(A_0,A_1,\ldots,A_{2^N-1}),以及 QQ 次查询。第 ii 次查询给出 Xi,YiX_i,Y_i,并按照 j=0,1,…,2N−1j=0,1,\ldots,2^N-1 的顺序执行下列操作:把 jj 写成 NN 位二进制数 bN−1bN−2…b0b_{N-1}b_{N-2}\ldots b_0,令 j′j' 为翻转其中第 XiX_i 位后表示的整数;如果 bXi=Yib_{X_i}=Y_i,就把当前的 AjA_j 加到 Aj′A_{j'} 中。

所有查询依次完成后,输出序列中每个元素对 998244353998244353 取模的结果。这里二进制位从最低位开始编号为 00。

输入格式

第一行两个整数 N,QN,Q。第二行给出 2N2^N 个整数 A0,A1,…,A2N−1A_0,A_1,\ldots,A_{2^N-1}。接下来 QQ 行,每行两个整数 Xi,YiX_i,Y_i。

输出格式

输出一行 2N2^N 个整数,依次表示所有查询结束后的 A0,A1,…,A2N−1A_0,A_1,\ldots,A_{2^N-1},相邻整数用空格分隔。

样例输入 1

2 2
0 1 2 3
1 1
0 0

样例输出 1

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

数据范围

  • 1≤N≤181\le N\le 18,1≤Q≤2×1051\le Q\le 2\times 10^5;
  • 0≤Ai<9982443530\le A_i<998244353;
  • 0≤Xi<N0\le X_i<N,Yi∈{0,1}Y_i\in\{0,1\};
  • 输入均为整数。
子任务编号 分值 特殊限制
1 10 N≤5N\le 5,Q≤20Q\le 20
2 15 所有 XiX_i 两两不同
3 所有 XiX_i 均相同
4 30 X1≤X2≤⋯≤XQX_1\le X_2\le\cdots\le X_Q
5 无特殊限制