当前位置:   article > 正文

蓝桥杯A组选数异或_区间异或c++两个数组请计算有多少个区间(l,r)

区间异或c++两个数组请计算有多少个区间(l,r)

题目描述

给定一个长度为 n 的数列A1,A2,... , An 和一个非负整数 x。
给定 m 次查询, 每次询问能否从某个区间 [l, r] 中选择两个数使得他们的异或等于 x。

输入格式

输入第一行包含三个整数n,m,x。
第二行包含n个整数A1,A2,...,An。
接下来m行,每行两个整数l,r表示询问区间[l, r]。
20%的测试数据:1≤n,m≤100;
40%的测试数据:1≤n,m≤1000;
100%的测试数据:1≤n,m≤100000,0≤x,Ai<2^20,1≤l≤r≤n;

输出格式

对于每个询问, 如果该区间内存在两个数的异或为 x 则输出yes, 否则输出no。

输入样例 复制

  1. 4 4 1
  2. 1 2 3 4
  3. 1 4
  4. 1 2
  5. 2 3
  6. 3 3

输出样例 复制

  1. yes
  2. no
  3. yes
  4. no
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 3e5 + 5;
  4. int a[N], b[N];
  5. struct node
  6. {
  7. int l, r, maxx;
  8. } tr[N * 4];
  9. void pushup(int k) { tr[k].maxx = max(tr[k * 2].maxx, tr[k * 2 + 1].maxx); }
  10. void build(int k, int l, int r)
  11. {
  12. tr[k].l = l;
  13. tr[k].r = r;
  14. if (tr[k].l == tr[k].r)
  15. {
  16. tr[k].maxx = b[l];
  17. return;
  18. }
  19. int mid = l + r >> 1;
  20. build(k * 2, l, mid);
  21. build(k * 2 + 1, mid + 1, r);
  22. pushup(k);
  23. }
  24. int query(int k, int l, int r)
  25. {
  26. if (tr[k].l == l && tr[k].r == r)
  27. return tr[k].maxx;
  28. int mid = tr[k].l + tr[k].r >> 1;
  29. if (r <= mid)
  30. return query(k * 2, l, r);
  31. else if (l > mid)
  32. return query(k * 2 + 1, l, r);
  33. else
  34. return max(query(k * 2, l, mid), query(k * 2 + 1, mid + 1, r));
  35. }
  36. void solve()
  37. {
  38. int n, m, x;
  39. scanf("%d %d %d", &n, &m, &x);
  40. for (int i = 1; i <= n; i++)
  41. scanf("%d", &a[i]);
  42. map<int, int> last;
  43. for (int i = 1; i <= n; i++)
  44. {
  45. int y = a[i] ^ x;
  46. if (!last.count(y))
  47. b[i] = -1;
  48. else
  49. b[i] = last[y];
  50. last[a[i]] = i;
  51. }
  52. build(1, 1, n);
  53. while (m--)
  54. {
  55. int l, r;
  56. scanf("%d %d", &l, &r);
  57. int maxx_pos = query(1, l, r);
  58. puts(maxx_pos >= l ? "yes" : "no");
  59. }
  60. }
  61. int main()
  62. {
  63. solve();
  64. return 0;
  65. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/560702
推荐阅读
相关标签
  

闽ICP备14008679号