#369. [R59D]数组查询

[R59D]数组查询

时空限制

1S/512M

题目描述

给定一个长度为 nn 的非负整数数组 a1,a2,,ana_1, a_2, \dots, a_n

定义一个序列 s=[s1,s2,,sm]s = [s_1, s_2, \dots, s_m] 的权值 w(s)w(s) 为该序列中所有相邻元素对的按位异或值的和。即:

w(s)=i=1m1(sisi+1)w(s) = \sum_{i=1}^{m-1} (s_i \oplus s_{i+1})

特别地,当序列长度 m<2m < 2 时,w(s)=0w(s) = 0

现在有 qq 相互独立的查询。 在第 jj 次查询中,给定 kjk_j 个严格递增的下标 p1,p2,,pkjp_1, p_2, \dots, p_{k_j}。你需要从原序列 aa 中暂时删除这些下标对应的元素。删除后,序列 aa 中剩余的元素将保持原有的相对顺序,拼接成一个新的序列 aa'

请你计算并输出每次查询后,新序列 aa' 的权值 w(a)w(a')

格式

输入格式

第一行包含两个正整数 n,qn, q,分别表示原序列的长度和查询的次数。

第二行包含 nn 个非负整数 a1,a2,,ana_1, a_2, \dots, a_n,表示原序列的元素。

接下来的 qq 行,每行首先给出一个正整数 kjk_j,随后跟着 kjk_j 个严格递增的正整数 p1,p2,,pkjp_1, p_2, \dots, p_{k_j},表示本次查询需要删除的元素下标。

输出格式

输出包含 qq 行,每行一个整数,第 ii 行的整数表示第 ii 次查询的新序列权值。

样例

样例输入 #1

5 2
1 2 3 4 5
1 3
2 2 4

样例输出 #1

10
8

样例解释 #1

原序列为 a=[1,2,3,4,5]a = [1, 2, 3, 4, 5]

查询 11: 删除下标 33(对应数值 33)。 剩余序列 a=[1,2,4,5]a' = [1, 2, 4, 5]。 权值 $w(a') = (1\oplus2) + (2\oplus4) + (4\oplus5) = 3 + 6 + 1 = 10$。

查询 22: 删除下标 2,42, 4(对应数值 2,42, 4)。 剩余序列 a=[1,3,5]a' = [1, 3, 5]。 权值 w(a)=(13)+(35)=2+6=8w(a') = (1\oplus3) + (3\oplus5) = 2 + 6 = 8

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 nn\le qq\le
11 4040 20002000
22 6060 2×1052 \times 10^5

对于 100%100\% 的数据,3n2×1053 \le n \le 2\times 10^51q2×1051 \le q \le 2 \times 10^50ai2300 \le a_i \le 2^{30}1kjn1 \le k_j \le n1p1<p2<<pkjn1 \le p_1 < p_2 < \dots < p_{k_j} \le n,保证所有查询的 kjk_j 的和不超过 2×1052\times 10^5