把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 AT abc308_g

传送门

题意

有 $m$ 个操作,分三个种类:

  1. 加入 $x$。
  2. 删除 $x$。
  3. 在现有的数中两个数的最小的异或值的。

分析

很明显,我们的难点在于计算,
我们可以得到这样的性质: 最小异或值,必然产生于两个相邻的数中。

证明:

设当前的数为 $x$,与其形成的最小异或值的值为 $z$,$z$ 与 $x$ 不相邻。
$x$ 与 $z$ 必然是从某个位置(二进制位上)(令其为 $id$ 位)开始不同,否则两个就是相同的数,也可以看做相邻。
继续分析,必然存在某个数在 $x$ 与 $z$ 的中间,令这个数为 $y$。
由于 $x$ 与 $z$ 是从 $id$ 位开始不同,所以他们的前几位必然都相同。
而 $y$ 作为两个数之间的数,前几位也与其相同。
由于 $y$ 的 $id$ 位必然为 $0$ 或 $1$,
因此 $y$ 的 $id$ 位必然与 $x$ 或 $z$ 相同,由此 $\min \left \{ y\oplus z,y\oplus x \right \} < x \oplus z$。
由此必然产生于两个相邻的数。

至于代码,我们可以使用 set 维护。

posted @ 2023-07-02 07:30  djh0314  阅读(15)  评论(0)    收藏  举报  来源
浏览器标题切换
浏览器标题切换end