A120016.字典树模板(带删)

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个多重集 AA,初始时 AA 中只包含一个整数 00

现在需要依次执行 qq 个操作,操作共有三种:

  • + x:向多重集 AA 中加入一个整数 xx
  • - x:从多重集 AA 中删除一个整数 xx
  • ? x:询问 xx 与多重集 AA 中某个整数异或后的最大值。

对于一次 ? x 操作,你需要求出:

maxyA(xy)\max_{y\in A}(x\oplus y)

其中 \oplus 表示按位异或运算。

多重集允许存在相同的元素。

需要注意的是,执行 - x 操作时,不保证当前多重集 AA 中一定存在 xx

如果 AA 中存在 xx,则删除其中一个 xx

如果 AA 中不存在 xx,则本次删除操作不产生任何影响。

整数 00 始终存在于多重集 AA 中。

输入格式

第一行输入一个整数 qq,表示操作次数。

接下来 qq 行,每行输入一个字符 opop 和一个整数 xx

其中 opop+-?

输出格式

对于每个 ? x 操作,输出一行一个整数,表示 xx 与多重集 AA 中某个整数异或后的最大值。

输入输出样例

  • 输入#1

    10
    + 8
    + 9
    + 11
    + 6
    + 1
    ? 3
    - 8
    ? 3
    ? 8
    ? 11

    输出#1

    11
    10
    14
    13

说明/提示

样例解释 #1

前五次操作后,多重集 AA 中包含:

0,8,9,11,6,10,8,9,11,6,1

对于 ? 3,最大值为:

38=113\oplus 8=11

删除 88 后,多重集 AA 中包含:

0,9,11,6,10,9,11,6,1

之后三个询问的最大异或值分别为 10,14,1310,14,13

数据范围

对于所有测试数据,满足:

  • 1q2000001\le q\le 200000
  • 1x1091\le x\le 10^9
  • op{+,,?}op\in\{+, -, ?\}
  • 保证至少存在一次 ? 操作
  • 初始时多重集 AA 中包含整数 00
  • 整数 00 始终存在于多重集 AA
首页