首页 > 其他 > 详细

【转载】线性基的更多操作!

时间:2019-03-11 20:43:40      阅读:147      评论:0      收藏:0      [点我收藏+]

查询某个数

转自帅到报警
就是查找某个数是否可以由这 n 个数中任一个数异或得到。首先还是刚才那个定理:线性基的值域与原数组的值域相同。
还有我们要发现一个性质:如果 x1 ^ x1 = x3, 那么 x3 ^ x2 = x1,且 x3 ^ x1 = x2(可以自己证明一下)。
我们也是从低到高扫这个数的每一位,如果这第 i 位为 1,就异或上 Pi,然后知道处理到最后一位。如果变成 0 了,那么就是可以的。

查询最值

转自Marser

最大值可以用贪心的思想来做。
从高到低遍历数组,如果ans^第i位的那个数后大于ans,则^这个数,因为这样可以保证ans第i位为1,且后面不可能有机会改变第i位。
很显然,数组中最小的非零数就是最小值。

查询第k大值

转自Marser

首先将数组中的所有数变成包含这个最高位且可以通过Xor得到的最小值。
具体实现方法就是每一位向后扫,若Xor后变小,则Xor。
之后就可以发现第k大只要将k改为二进制后,将二进制所对应的位置的数Xor起来即可。

【转载】线性基的更多操作!

原文:https://www.cnblogs.com/hjmmm/p/10512912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!