好家伙,标签一出来给我假完了。
刚开始以为是拆位对于每一位的每一层去做贪心,结果发现假了。
有一个很显然的性质是,答案一定由原序列若干个数异或得到,现在我们需要观察这些数有什么性质。
我们再仔细一想,如果这些数是和位置有关的话,由于我可以任意排列整个序列,那么交换两个位置同样合法,也同样会改变最终答案,所以肯定和位置以及数值没有关系。
一个比较强的结论是,其只和选出的数的个数有关,且只和选出的数的个数的奇偶性有关。
如果是奇数的话,由于每个相邻两个位置都要操作一遍,那么必然存在一个位置你在中间没有将其算上贡献,所以只能选择偶数个数。
到了这一步就比较容易了,简单相邻两个异或一下插入到线性基里查询最大值即可,注意不能是全集,所以还得删除每个元素都判断一下。