CF1872E.Data Structures Fan

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

Data Structures Fan

题目描述

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

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

  • “1 ll rr”(1≤l≤r≤n1 \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 = g 的 aia_i 的按位异或(bitwise XOR)值。注意,空集的 XOR⁡\operatorname{XOR} 被认为是 00。

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

例如,若 n=4n = 4,a=[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},对应下标为 22 和 33,因此答案为 a2⊕a3=2⊕3=1a_2 \oplus a_3 = 2 \oplus 3 = 1。
  2. “1 11 33”——将 s1,s2,s3s_1, s_2, s_3 取反,ss 由 1001\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} 的字符串。

输入格式

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

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

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

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(1≤ai≤1091 \le a_i \le 10^9)。

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

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

接下来的 qq 行,每行描述一个查询。每个查询的第一个数字 tp∈{1,2}tp \in \{1, 2\} 表示查询类型:若 tp=1tp = 1,则后面有两个整数 1≤l≤r≤n1 \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 取反,ss 由 01000\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,答案为 a3⊕a4=3⊕4=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

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