十三届蓝桥杯省赛A组 选数异或

题意

m次询问l,r区间内是否有两个数异或为x

分析

当看到 mmm 次查询时,如果每次都去区间里重新找一遍,代价太大。我们需要预处理

对于一个固定的右端点 RRR,什么样的左端点 LLL 是合法的?

  • 假设我们在位置 iii 有一个数 AiA_iAi。
  • 要想凑成异或 xxx,我们需要另一个数 target=Ai⊕xtarget = A_i \oplus xtarget=Ai⊕x。(使用异或的性质)
  • 如果 targettargettarget 曾经在位置 jjj (j<ij < ij<i) 出现过,那么区间 j,ij, ij,i 就是一个合法区间
  • 并且任何包含 j,ij, ij,i 的区间(即左端点 ≤j\le j≤j,右端点 ≥i\ge i≥i)都是合法的,即可以向外延申。

对每次询问是否存在,将"存在性问题"转化为"贪心问题"
在右端点固定为 rrr 的情况下,为了满足条件,左端点距离右端点最近到哪里?

  • 定义 dpidpidpi 为:以 iii 为右端点,能够满足"区间内存在两数异或为 xxx"的最靠右的左端点位置。

代码

cpp 复制代码
void solve() {
  int n,m,x;cin>>n>>m>>x;
  vector<int>dp(n+1);//dp[i] 表示区间[dp[i],i]之间有两数a^b=x
  map<int,int>lstpos;
  forr(i,1,n){
    int a;
    cin>>a;
    dp[i]=max(dp[i-1],lstpos[a^x]);// 找最右边的合法左端点
    lstpos[a]=i;// 记录这个值出现的最右位置
  }
  forr(i,1,m){
    int l,r;cin>>l>>r;
    cout<<(dp[r]>=l?"yes":"no")<<endl;
  }
  /*
  // 二分太麻烦了 直接索引最右左端点就可以
  vector<pii>pos;
  sort(a.begin()+1,a.end(),[&](pii x,pii y){
    return x.fir<y.fir;
  });
  vector<int>b(n+1);
  map<int,int>kv;
  forr(i,1,n){
    b[i]=a[i].fir;
    kv[i]=a[i].sec;
  }
  forr(i,1,n){
    int fpos=lower_bound(b.begin()+i+1,b.end(),b[i]^x)-b.begin();
    if(fpos>n||b[fpos]!=(b[i]^x))continue;
    if(fpos==i)fpos++;
    int bpos=upper_bound(b.begin()+1,b.end(),b[i]^x)-b.begin();
    bpos--;
    if(b[bpos]!=(b[i]^x))continue;
    forr(p,fpos,bpos){
      pos.push_back({})
    }
  }

  forr(q,1,m){
    int fg=0;
    cout<<(fg?"yes":"no")<<endl;
  }
  */
}
相关推荐
小欣加油17 小时前
leetcode2574 左右元素和的差值
数据结构·c++·算法·leetcode·职场和发展
千寻girling17 小时前
一周没跑步了 ,今日跑步 5KM , 哑铃+健身 20min , 俯卧撑 30 个 ;
数据结构·c++·python·算法·leetcode·职场和发展·线性回归
8Qi81 天前
LeetCode 300 & 674:最长递增子序列 vs 最长连续递增子序列
算法·leetcode·职场和发展·动态规划
8Qi81 天前
LeetCode 188 & 123:股票买卖问题(限制交易次数)—— 联合题解
算法·leetcode·职场和发展·动态规划
我爱cope1 天前
【Agent智能体22 | 构建AI工作流的技巧-延迟、成本优化】
人工智能·设计模式·语言模型·职场和发展
酉鬼女又兒1 天前
零基础入门计算机网络:MAC地址、IP地址与ARP协议全面解析(含考研真题详解)
网络·网络协议·tcp/ip·计算机网络·考研·macos·职场和发展
Felomeng1 天前
从旧博客出发,向新的世界走去
程序人生·职场和发展
想吃火锅10051 天前
【leetcode】3.无重复字符的最长字串js版
算法·leetcode·职场和发展
Raink老师1 天前
【AI面试临阵磨枪-100】Harness 与 MCP/A2A 协议、Skill 体系如何集成?
人工智能·面试·职场和发展
我爱cope1 天前
【Agent智能体21 | 构建AI工作流的技巧-优化组件的常用方法】
人工智能·设计模式·语言模型·职场和发展