首页 > 其他分享 >[ABC308G]MinimumXorPairQuery

[ABC308G]MinimumXorPairQuery

时间:2023-07-26 15:14:17浏览次数:46  
标签:重集 ABC308G 异或 bigoplus ans 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

标签:重集,ABC308G,异或,bigoplus,ans,MinimumXorPairQuery
From: https://www.cnblogs.com/wscqwq/p/17582492.html

相关文章