当前位置: 首页 > wzjs >正文

杭州大江东建设局网站中国建设招标网住建部网站

杭州大江东建设局网站,中国建设招标网住建部网站,怎样做好邯郸网站建设,车体广告设计图片目录 题目描述 解题思路 完整代码 举例 题目描述 4645. 选数异或 - AcWing题库 解题思路 本质问题:在 [l, r] 区间是否能找到 a[i] ^ a[j] x 的数对。 核心思路: 通过异或性质快速定位潜在的匹配数。使用 dp 数组记录匹配状态。 3. 查询时只需判断…

目录

题目描述

解题思路

完整代码

举例


题目描述

4645. 选数异或 - AcWing题库

解题思路

本质问题:在 [l, r] 区间是否能找到 a[i] ^ a[j] = x 的数对。

核心思路

  1. 通过异或性质快速定位潜在的匹配数。
  2. 使用 dp 数组记录匹配状态。

      3. 查询时只需判断 dp[r] 是否大于等于 l

其实这个转移方程的逻辑就像在“找搭子”——

  • 你在遍历数组,每遇到一个数 a,就会去问:“之前有没有一个数和我异或能等于 x 啊?”
  • 如果有(last[x ^ a] 找到了,每次遇到新元素 a,只需要在 last 中用 last[x ^ a] 查找与之匹配的 b 是否出现过),就用它的位置来更新当前的“最远有效位置”;
  • 如果没有,那就接着用之前的最优答案(dp[i-1])呗。

 

完整代码

#include <bits/stdc++.h> 
using namespace std;const int N = 100010;    // 定义数组的最大长度
int dp[N];               // dp[i] 表示在前 i 个元素中,能够与第 i 个元素构成异或为 x 的元素的最左位置
int n, m, x;             // n:数组长度,m:查询次数,x:目标异或值int main() {cin >> n >> m >> x;unordered_map<int, int> last; // 用于存储每个元素最后一次出现的位置,键为元素,值为位置索引// 遍历输入数组for (int i = 1; i <= n; i++) {int a;cin >> a;  // 读取当前元素/*** 逻辑说明:* - x ^ a:表示与当前元素 a 异或后等于 x 的目标元素。* - last[x ^ a]:如果该目标元素之前出现过,返回它的索引,否则返回 0。* - dp[i]:表示在前 i 个元素中,能找到与第 i 个元素异或为 x 的最近索引。*   - max(dp[i-1], last[x ^ a]) 确保 dp[i] 始终存储到当前位置为止的最优解。*/dp[i] = max(dp[i - 1], last[x ^ a]);// 更新当前元素 a 最后一次出现的位置为 ilast[a] = i;}// 处理查询while (m--) {int l, r;cin >> l >> r;  // 读取查询区间 [l, r]/*** 判断区间内是否存在一对异或结果为 x 的元素:* - dp[r] >= l:表示在 [l, r] 区间内,存在一对异或为 x 的元素对。*   因为 dp[r] 表示能与位置 r 之前某元素组成异或为 x 的最远有效位置,*   如果这个位置大于等于查询区间的左边界 l,则表示区间内有解。*/if (l <= dp[r]) cout << "yes" << endl;  // 存在符合条件的元素对else cout << "no" << endl;   // 不存在}return 0;
}

举例

数组: [1, 3, 1, 2, 3]
x = 2
查询:
1) [1, 3]
2) [2, 5]
3) [3, 4]

🔄 逐步分析数组

📌 第 1 步: i=1 (a=1)

  • 想找 1 ^ ? = 2,所以 ? = 1 ^ 2 = 3
  • 3 还没出现过。
  • dp[1] = max(dp[0], last[3]) = 0
  • last[1] = 1

📌 第 2 步: i=2 (a=3)

  • 想找 3 ^ ? = 2? = 3 ^ 2 = 1
  • 1 在位置 1 出现过。
  • dp[2] = max(dp[1], 1) = 1,表示在第2个位置前找到了匹配。
  • last[3] = 2

📌 第 3 步: i=3 (a=1)

  • 想找 1 ^ ? = 2? = 3
  • 3 最后出现在位置2。
  • dp[3] = max(dp[2], 2) = 2,匹配成功。
  • last[1] = 3

📌 第 4 步: i=4 (a=2)

  • 想找 2 ^ ? = 2? = 0,还没出现过。
  • dp[4] = max(dp[3], 0) = 2
  • last[2] = 4

📌 第 5 步: i=5 (a=3)

  • 想找 3 ^ ? = 2? = 1
  • 1 最后在位置3。
  • dp[5] = max(dp[4], 3) = 3
  • last[3] = 5

📊 最终 dp 数组状态:

下标 (i):1   2   3   4   5
数组 (a):1   3   1   2   3
dp[i]   :0   1   2   2   3

🏹 查询解答

🟢 查询1: [1, 3]

  • dp[3] = 2 >= 1 → 存在匹配。
  • ✅ 输出:yes

🟡 查询2: [2, 5]

  • dp[5] = 3 >= 2[2, 5] 区间内存在匹配。
  • ✅ 输出:yes

🔴 查询3: [3, 4]

  • dp[4] = 2 >= 3? ✖ 不成立(2 < 3)
  • ❌ 输出:no

 


文章转载自:

http://DRKXlTb1.yjdqL.cn
http://PShgvmJR.yjdqL.cn
http://6TexJtNA.yjdqL.cn
http://X8nUJCza.yjdqL.cn
http://my03bt6f.yjdqL.cn
http://2DAJ4lw4.yjdqL.cn
http://sIkyp9qo.yjdqL.cn
http://Px7FDjlA.yjdqL.cn
http://pEl1VzW3.yjdqL.cn
http://mcAGZwnJ.yjdqL.cn
http://gg7L4j0Z.yjdqL.cn
http://RavlpeS2.yjdqL.cn
http://uuPzMcED.yjdqL.cn
http://55cJh9rB.yjdqL.cn
http://tm7sjzoy.yjdqL.cn
http://ul0GKKiv.yjdqL.cn
http://O1mb88IF.yjdqL.cn
http://PQsnOQoi.yjdqL.cn
http://4dz7TXfv.yjdqL.cn
http://BT2b3JR7.yjdqL.cn
http://hC4gyO72.yjdqL.cn
http://aRU4no0v.yjdqL.cn
http://3D9VyOkw.yjdqL.cn
http://2AXBb6I2.yjdqL.cn
http://ddkYI0hL.yjdqL.cn
http://XpW9VbP7.yjdqL.cn
http://IpefNG6C.yjdqL.cn
http://X7iyV2qC.yjdqL.cn
http://Q4fRYQKR.yjdqL.cn
http://K0S6GdTP.yjdqL.cn
http://www.dtcms.com/wzjs/754987.html

相关文章:

  • 珠海门户网站建设短视频网站如何做推广
  • 福千欣隆网站建设公司 概况类似wordpress博客系统
  • 2017网站开发工资wordpress有广告插件
  • 安庆怀宁网站建设兼职青岛外贸假发网站建设
  • 做网站 以图搜货全国网页制作大赛
  • 自适应微网站开发资产管理系统源码
  • h5网站建设作用完成网站群建设
  • 做seo网站优化多少钱wordpress 汉化包
  • 专门做特卖的网站是什么美食网站开发
  • 网站结构和布局区别网站开发的好处和弊端
  • 东莞横沥网站设计网站建网站建站专业公司
  • 备案主体负责人 网站负责人运城哪家做网站的公司好
  • 设计网站可能遇到的问题做企业网站收费多少钱
  • 未来中森网站建设咨询上海金融网站建设
  • dedecms 招聘网站免费源码资源站
  • 上海低价网站建设wordpress 分类目录 seo
  • 公司网站界面设计做网站答辩总结范文
  • 用云空间制作网站好兄弟资源网在线看片
  • 网站介绍模版龙之向导外贸网址
  • 广州网站设计企业给个网站急急急2021
  • 的网站设计案例目前最火的互联网项目
  • 拜师做网站企业作风建设心得体会
  • 开发应用吉林关键词优化的方法
  • 安全的网站建设推广手机版制作app软件
  • 做网站年入多少常州微网站建设
  • 织梦网站转跳手机站搜索引擎营销的分类
  • wordpress本地网站搭建整套课程网络销售公司经营范围
  • 交通网站建设方案怎么做网站弹幕效果
  • 网站开发技术联系方式html怎么做网站背景
  • 设计院门户网站建设方案中企动力科技集团有限公司