Submission details
Task:Xor sum
Sender:Ciphra
Submission time:2025-09-22 17:20:47 +0300
Language:C++ (C++17)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#20.34 sdetails

Code

#include <iostream>
#include <utility>
#include <vector>


struct SegmentTree{
  std::vector<int> tree;
  int size;
  SegmentTree(std::vector<int>& arr){
    size = arr.size();
    tree.resize(2*size);
    buildTree(0, 0, size-1, arr);
  }

  void buildTree(int treeIndex, int rangeL, int rangeR, std::vector<int>& arr){
    if (rangeL==rangeR){
      tree[treeIndex] = arr[rangeL];
      return;
    }

    int mid = rangeL + (rangeR - rangeL)/2;
    int treeLeftIdx = getLeft(treeIndex);
    int treeRightIdx = getRight(treeIndex);
    buildTree(treeLeftIdx, rangeL, mid, arr);
    buildTree(treeRightIdx, mid+1, rangeR, arr);

    tree[treeIndex] = tree[treeLeftIdx]^tree[treeRightIdx];
  }

  int getLeft(int idx){
    return 2*idx+1;
  }

  int getRight(int idx){
    return 2*idx+2;
  }
  
  int query(int treeIndex, int ql, int qr, int rangeL, int rangeR){
    if (ql <= rangeL && qr >= rangeR){
      return tree[treeIndex];
    }

    int mid = rangeL + (rangeR - rangeL)/2;
    int treeLeftIdx = getLeft(treeIndex);
    int treeRightIdx = getRight(treeIndex);

    int sum = 0;

    if (ql<=mid){
      sum^= query(treeLeftIdx, ql, qr, rangeL, mid);
    }
    if (qr>mid){
      sum^= query(treeRightIdx, ql, qr, mid+1, rangeR);
    }

    return sum;
  }
};



int main(){
  int n, m;
  std::cin >> n >> m;
  std::vector<int> vals(n);
  for (int i = 0; i<n; ++i){
    std::cin >> vals[i];
  }
  SegmentTree st(vals);
  
  std::vector<std::pair<int, int>> queries(m);
  for (int q = 0; q<m; ++q){
    int ql,qr;
    std::cin >> ql >> qr;
    queries[q].first = ql-1;
    queries[q].second = qr-1;
  }

  for (int q = 0; q<m; ++q){
    int sum = st.query(0, queries[q].first, queries[q].second, 0, st.size-1);
    std::cout << sum << "\n";
  }


}

Test details

Test 1

Verdict: ACCEPTED

input
8 36
7 6 4 6 2 9 4 8
1 1
1 2
1 3
...

correct output
7
1
5
3
1
...

user output
7
1
5
3
1
...

Test 2

Verdict:

input
200000 200000
921726510 307633388 992247073 ...

correct output
834756431
130379787
403037296
308618218
784778243
...

user output
834756431
130379787
403037296
308618218
784778243
...
Truncated

Error:
munmap_chunk(): invalid pointer