Submission details
Task:Xor sum
Sender:aalto26dm_017
Submission time:2026-09-21 16:32:51 +0300
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.38 sdetails

Code

#include <iostream>
#include <vector>
#include <climits>

using namespace std;

void buildTree(vector<long long>& tree, vector<long long>& arr, long long node, long long l, long long r){
    if (l==r){
        tree[node]=arr[l];
        return;
    }

    long long mid=(l+r)/2;

    buildTree(tree, arr, node*2, l, mid);
    buildTree(tree, arr, node*2+1, mid+1, r);

    tree[node]=tree[node*2]^tree[node*2+1];
}

long long query(vector<long long>& tree, long long ql, long long qr, long long node, long long l, long long r){
    if (qr<l || ql>r){
        return 0;
    }
    if (ql<=l && qr>=r){
        return tree[node];
    }

    long long mid=(l+r)/2;

    return query(tree, ql, qr, node*2, l, mid)^query(tree, ql, qr, node*2+1, mid+1, r);
}


int main(){
    long long n, q;
    cin >> n >> q;
    vector<long long> arr(n+1);

    for (long long i=0;i<n;i++){
        cin >> arr[i+1];
    }

    vector<pair<long long,long long>> queries(q);

    for (long long i=0;i<q;i++){
        long long a, b;
        cin >> a >> b;

        queries[i]={a, b};
    }

    vector<long long> segTree(4*n);
    buildTree(segTree, arr, 1, 1, n);

    //for (int i=0;i<segTree.size();i++){
        //cout << segTree[i] << ' ';
    //}
    //cout << '\n';
    for (auto &q: queries){
        cout << query(segTree, q.first, q.second, 1, 1, n) << '\n';
    }
    return 0;
}

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: ACCEPTED

input
200000 200000
921726510 307633388 992247073 ...

correct output
834756431
130379787
403037296
308618218
784778243
...

user output
834756431
130379787
403037296
308618218
784778243
...