[ABC308G]MinimumXorPairQuery

[ABC308G] Minimum Xor Pair Query

必须知道的性质:

对于三个非负整数 \(x,y,z(x < y < z)\),有 \(\min(x \bigoplus y,y\bigoplus z)<x\bigoplus z\)

  • 证明

    从二进制最高位开始 \(i=\log V\),对 \(x,y,z\) 进行如下操作:

    1. 若它们的当前位都两两相同,继续跳到下一位 i--

    2. 根据三个数的大小关系,可以得到两种情况:

      1. \(x_i=0,y_i=0,z_i=1\)

      显然,这时有 \(x\bigoplus y<x\bigoplus z\)

      1. \(x_i=0,y_i=1,z_i=1\)

      \(y\bigoplus z<x\bigoplus z\)

有了上述性质,我们只需要维护大小相邻的数的异或和就行了。

开两个可重集。可重集 \(s\) 记录黑板上当前有哪些元素;另一个可重集 \(ans\) 记录 \(s\) 中相邻元素的异或值。

插入删除操作在维护 \(s\) 的同时维护一下 \(ans\) 即可。

AC

posted @ 2023-07-26 14:55  wscqwq  阅读(16)  评论(0编辑  收藏  举报