P8773 蓝桥杯 2022 省A 选数异或

传送门

种方法

一:动态规划

通过观察数据可以发现a[i]的值最大是2^20,很细节。首先一个异或的性质是a xor b = c可以推出a xor c = b。我们可以建立一个数组b,b[i]=x xor a[i],在之后的数中一旦查到这个数和之前的b数组的某个值相等,即两个数可以组成异或对。现在问题是如何找到和a[i]相等的b的位置,注意到a的范围,可以用桶存b的位置,loc[b[i]]=i。f[i]表示[1,i]之间所有异或对中左边的数的位置的最大值,得到状态转移方程f[i]=max{f[i-1],loc[a[i]]}。输出自然判断f[r]是否大于等于l即可。

二:ST表/线段树

我们很容易维护在每一个位置上的数的异或对的最大位置,记为loc[i]。对于每个l r,寻找l<=k<=r,使得loc[k]的值大于等于l即可,可转换为找在l和r区间的loc的最大值,判断是否大于l,到这里可以清晰地判断出区间最值用ST表最好,线段树也行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值