CF1872E.Data Structures Fan

传统题 时间 2000 ms 内存 256 MiB 8 尝试 3 已通过 1 标签

Data Structures Fan

题目描述

给定一个整数数组 a1,a2,,ana_1, a_2, \ldots, a_n,以及一个长度为 nn 的二进制字符串 ss^\dagger)。

Augustin 非常喜欢数据结构,因此他让你实现一个数据结构来回答 qq 个查询。查询有两种类型:

  • “1 ll rr”(1lrn1 \le l \le r \le n)——将 ss 中第 ll 到第 rr 个字符全部取反。即,将所有 0\texttt{0} 变为 1\texttt{1},所有 1\texttt{1} 变为 0\texttt{0}
  • “2 gg”(g{0,1}g \in \{0, 1\})——计算所有满足 si=gs_i = gaia_i 的按位异或(bitwise XOR)值。注意,空集的 XOR\operatorname{XOR} 被认为是 00

请你帮助 Augustin 回答所有的查询!

例如,若 n=4n = 4a=[1,2,3,6]a = [1, 2, 3, 6]s=1001s = \texttt{1001},考虑如下查询序列:

  1. “2 00”——我们关注 si=0s_i = \texttt{0} 的下标。此时 s=1001s = \texttt{1001},对应下标为 2233,因此答案为 a2a3=23=1a_2 \oplus a_3 = 2 \oplus 3 = 1
  2. “1 11 33”——将 s1,s2,s3s_1, s_2, s_3 取反,ss1001\texttt{1001} 变为 0111\texttt{0111}
  3. “2 11”——关注 si=1s_i = \texttt{1} 的下标。此时 s=0111s = \texttt{0111},下标为 2,3,42, 3, 4,答案为 $a_2 \oplus a_3 \oplus a_4 = 2 \oplus 3 \oplus 6 = 7$。
  4. “1 22 44”——s=0111s = \texttt{0111} 变为 s=0000s = \texttt{0000}
  5. “2 11”——s=0000s = \texttt{0000},没有 si=1s_i = \texttt{1} 的下标,因此答案为 00

^\dagger 二进制字符串指仅包含 0\texttt{0}1\texttt{1} 的字符串。

输入格式

输入的第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n1051 \le n \le 10^5),表示数组的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091 \le a_i \le 10^9)。

第三行包含一个长度为 nn 的二进制字符串 ss

第四行包含一个整数 qq1q1051 \le q \le 10^5),表示查询的数量。

接下来的 qq 行,每行描述一个查询。每个查询的第一个数字 tp{1,2}tp \in \{1, 2\} 表示查询类型:若 tp=1tp = 1,则后面有两个整数 1lrn1 \le l \le r \le n,表示执行类型 11 的操作,参数为 l,rl, r;若 tp=2tp = 2,则后面有一个整数 g{0,1}g \in \{0, 1\},表示执行类型 22 的操作,参数为 gg

保证所有测试用例中 nn 的总和不超过 10510^5,所有测试用例中 qq 的总和不超过 10510^5

输出格式

对于每个测试用例中的每个类型 22 的查询,输出对应的答案。

说明/提示

我们来分析第一个测试用例:

  1. “2 00”——我们关注 si=0s_i = \texttt{0} 的下标。此时 s=01000s = \texttt{01000},下标为 1,3,4,51, 3, 4, 5,答案为 $a_1 \oplus a_3 \oplus a_4 \oplus a_5 = 1 \oplus 3 \oplus 4 \oplus 5 = 3$。
  2. “2 11”——关注 si=1s_i = \texttt{1} 的下标。此时 s=01000s = \texttt{01000},只有下标 22,答案为 a2=2a_2 = 2
  3. “1 22 44”——将 s2,s3,s4s_2, s_3, s_4 取反,ss01000\texttt{01000} 变为 00110\texttt{00110}
  4. “2 00”——关注 si=0s_i = \texttt{0} 的下标。此时 s=00110s = \texttt{00110},下标为 1,2,51, 2, 5,答案为 $a_1 \oplus a_2 \oplus a_5 = 1 \oplus 2 \oplus 5 = 6$。
  5. “2 11”——关注 si=1s_i = \texttt{1} 的下标。此时 s=00110s = \texttt{00110},下标为 3,43, 4,答案为 a3a4=34=7a_3 \oplus a_4 = 3 \oplus 4 = 7
  6. “1 11 33”——s=00110s = \texttt{00110} 变为 s=11010s = \texttt{11010}
  7. “2 11”——关注 si=1s_i = \texttt{1} 的下标。此时 s=11010s = \texttt{11010},下标为 1,2,41, 2, 4,答案为 $a_1 \oplus a_2 \oplus a_4 = 1 \oplus 2 \oplus 4 = 7$。

由 ChatGPT 4.1 翻译

样例

5
5
1 2 3 4 5
01000
7
2 0
2 1
1 2 4
2 0
2 1
1 1 3
2 1
6
12 12 14 14 5 5
001001
3
2 1
1 2 4
2 1
4
7 7 7 777
1111
3
2 0
1 2 3
2 0
2
1000000000 996179179
11
1
2 1
5
1 42 20 47 7
00011
5
1 3 4
1 1 1
1 3 4
1 2 4
2 0
3 2 6 7 7 
11 7 
0 0 
16430827 
47 

在线编程 IDE

建议全屏模式获得最佳体验