fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void build(int *tree, int *a, int i, int tl, int tr)
  5. {
  6. if (tl == tr)
  7. {
  8. tree[i] = a[tl];
  9. return;
  10. }
  11.  
  12. int mid = (tl + tr) / 2;
  13. build(tree, a, 2 * i, tl, mid);
  14. build(tree, a, 2 * i + 1, mid + 1, tr);
  15. tree[i] = tree[2 * i] ^ tree[2 * i + 1];
  16. }
  17.  
  18. int query(int *tree, int i, int tl, int tr, int l, int r)
  19. {
  20.  
  21. if (tr < l || tl > r)
  22. {
  23. return 0;
  24. }
  25.  
  26. if (l <= tl && tr <= r)
  27. {
  28. return tree[i];
  29. }
  30.  
  31. /// partial overlap part here
  32. int mid = (tl + tr) / 2;
  33. int left_child = query(tree, 2 * i, tl, mid, l, r);
  34. int right_child = query(tree, 2 * i + 1, mid + 1, tr, l, r);
  35. return left_child ^ right_child;
  36. }
  37. int main()
  38. {
  39. int n;
  40. cin >> n;
  41. int q;
  42. cin >> q;
  43. int a[n];
  44.  
  45. for (int i = 0; i < n; i++)
  46. {
  47. cin >> a[i];
  48. }
  49.  
  50. int tree[4 * n];
  51.  
  52. build(tree, a, 1, 0, n - 1);
  53.  
  54. while (q--)
  55. {
  56. int l, r;
  57. cin >> l >> r;
  58. l--, r--;
  59. int ans = query(tree, 1, 0, n - 1, l, r);
  60.  
  61. cout << ans << endl;
  62. }
  63.  
  64. return 0;
  65. }
  66.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty