#P10299. [2023年重庆八中NOI模拟]签到题

[2023年重庆八中NOI模拟]签到题

签到题(counting)

题目描述

两位神仙 zzhcjz 在玩游戏。

这个游戏中有 2n2^n 个点,这些点依次编号为 0,1,2,..,2n10,1,2,..,2^n-1,每个点有一个权值 viv_i

zzhcjz 可以在这些点间移动,但两人的移动方式不同。

如果 zzh 当前在点 ii ,她下一步可以移动到点 i1i-1 或者点 i+1i+1(如果这些点存在),因此,zzh 从点 ii 移动到点 jj 需要的最少步数为 ij|i-j|

cjz 会使用更加神仙的移动方式,如果他当前在点 ii ,则他下一步可以移动到 jj 当且仅当 j{0,1,2,...,2n1}j\in\{0,1,2,...,2^n-1\}bitcount(ij)=1bitcount(i\oplus j)=1 ,这里 \oplus 表示按位异或,即C++中的 i^j,而 bitcount(x)bitcount(x) 表示非负整数 xx 的二进制表示中 11 的个数。

可以发现,cjz 从点 ii 移动到点 jj 需要的最少步数为 bitcount(ij)bitcount(i\oplus j)

现在 zzhcjz 会进行 mm 次操作,每次操作中他们会给出三个非负整数 x,p,qx,p,q ,满足 x2n1,p2n1,qnx\leq 2^n-1,p\leq 2^n-1,q\leq n 。此时称一个点 yy 是好的,当且仅当 zzh 能从 xx 出发在 pp 步内到达 yy ,且 cjz 能从 xx 出发在 qq 步内到达 yy。即,满足 $y\in\{0,1,2,...,2^n-1\},|x-y|\leq p,bitcount(x\oplus y)\leq q$

对于每次操作, zzhcjz 会求出所有合法的点的权值和,即:

$$\sum_{y\in\{0,1,2,...,2^n-1\},|x-y|\leq p,bitcount(x\oplus y)\leq q} v_y $$

现在他们希望你也对于每次操作求出这个值。

输入格式

从文件 counting.in 读入。

输入第一行包含两个正整数 n,mn,m ,含义见题面。

输入第二行包含 2n2^n 个正整数 v0,v1,...,v2n1v_0,v_1,...,v_{2^n-1} ,依次表示每个点的点权。

接下来 mm 行,第 ii 行包含三个非负整数 xi,pi,qix_i,p_i,q_i ,表示第 ii 个操作中给出的参数。

输出格式

输出到文件 counting.out

输出 mm 行,第 ii 行一个数表示第 ii 个操作的答案。

样例
样例输入1
3 3
1 8 4 7 2 3 6 5
4 2 2
6 3 1
3 1 3
样例输出1
15
13
13
样例解释1

三组询问中满足要求的 yy 分别为:

{2,4,5,6}{4,6,7}{2,3,4}\{2,4,5,6\}\\ \{4,6,7\}\\ \{2,3,4\}
样例输入/输出 2~7

见下发文件

样例 171\sim 7 依次满足测试点 2,2,2,5,8,12,162,2,2,5,8,12,16 的限制。

数据范围与限制

对于所有数据,保证 n18,m5×105,vi109n\leq 18,m\leq 5\times 10^5,v_i\leq 10^9

对于所有编号为奇数的测试点,额外保证 m105m\leq 10^5

测试点编号 特殊限制
11 m=0m=0
2,3,42,3,4 n10,m2000n\leq 10,m\leq 2000
5,6,75,6,7 qi=nq_i=n
8,9,10,118,9,10,11 xi=0x_i=0
12,13,14,1512,13,14,15 pi=2n1p_i=2^n-1
16,17,18,19,2016,17,18,19,20 无特殊限制

友情提示:LL不规范,爆零两行泪。

本题需要输入/输出优化