#abc308g. [abc308_g]Minimum Xor Pair Query

[abc308_g]Minimum Xor Pair Query

问题描述

有一块黑板,你可以在上面写整数。初始时,黑板上没有任何整数。给定 QQ 个查询,请按顺序处理它们。

查询的类型有三种:

  • 1 x:在黑板上写入 xx

  • 2 x:从黑板上擦除 xx。在执行此查询时,保证黑板上至少有一个 xx

  • 3:打印在黑板上写的两个整数的最小可能的异或值。在处理此查询时,保证黑板上至少有两个整数。

什么是异或操作?非负整数 AABB 的异或操作 AoplusBA \\oplus B 定义如下。

  • 当将 AoplusBA \\oplus B 写成二进制时,如果 AABB 的二进制在 2k2^k 位(kgeq0k \\geq 0)上只有一个为 11,则在 2k2^k 位上为 11,否则为 00

例如,3oplus5=63 \\oplus 5 = 6(二进制表示为:011oplus101=110011 \\oplus 101 = 110)。

约束条件

  • 1leqQleq3times1051\\leq Q \\leq 3\\times 10^5
  • 0leqx<2300\\leq x < 2 ^{30}
  • 给定查询 22 时,黑板上至少有一个整数。
  • 给定查询 33 时,黑板上至少有两个整数。
  • 所有输入都是整数。

输入

输入以以下格式从标准输入给出:

QQ mathrmquery1\\mathrm{query}_1 mathrmquery2\\mathrm{query}_2 vdots\\vdots mathrmqueryQ\\mathrm{query}_Q

在第 ii 个查询中,首先给出查询的类型 cic_i(取值为 112233)。如果 ci=1c_i = 1ci=2c_i = 2,额外给出一个整数 xx

换句话说,每个查询具有以下三种格式之一。

11 xx 22 xx 33

输出

输出 qq 行,其中 qq 是查询中类型为 33 的查询数量。

jj 行(1leqjleqq1\\leq j\\leq q)应包含第 jj 个此类查询的答案。


样例输入 1

9
1 2
1 10
3
1 3
3
2 2
3
1 10
3

样例输出 1

8
1
9
0

处理第一个查询后,在黑板上写入了 22

处理第二个查询后,黑板上写入了 221010

处理第三个查询时,黑板上写的两个整数的最小可能异或值是 2oplus10=82 \\oplus 10 = 8

处理第四个查询后,黑板上写入了 22331010

处理第五个查询时,黑板上写的两个整数的最小可能异或值是 2oplus3=12 \\oplus 3 = 1

处理第六个查询后,黑板上写入了 331010

处理第七个查询时,黑板上写的两个整数的最小可能异或值是 3oplus10=93 \\oplus 10 = 9

处理第八个查询后,黑板上写入了 33 和两个 1010

处理第九个查询时,黑板上写的两个整数的最小可能异或值是 10oplus10=010 \\oplus 10 = 0