| Task: | Xor sum |
| Sender: | aalto26dm_001 |
| Submission time: | 2026-09-21 16:26:06 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.60 s | details |
Code
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdint>
#include <bitset>
using namespace std;
long long xorTree(const vector<long long>& tree, long long a, long long b)
{
long long n = tree.size() / 2;
a--;
b--;
a += n;
b += n;
long long minVal = 0;
while (a <= b)
{
if (a % 2 == 1)
{
minVal = minVal ^ tree[a++];
}
if (b % 2 == 0)
{
minVal = minVal ^ tree[b--];
}
a /= 2;
b /= 2;
}
return minVal;
}
void add(vector<long long>& tree, long long k, long long u)
{
k--;
long long n = tree.size() / 2;
k += n;
tree[k] = u;
for (k /= 2; k > 0; k /= 2)
{
tree[k] = min(tree[2 * k], tree[2 * k + 1]);
}
}
int main()
{
long long n, q;
cin >> n >> q;
vector<long long> segmentTree(2 * n);
for (long long i = n; i < 2 * n; i++)
{
cin >> segmentTree[i];
}
for (long long i = n - 1; i > 0; i--)
{
segmentTree[i] = segmentTree[2 * i] ^ segmentTree[2 * i + 1];
}
for (long long i = 0; i < q; i++)
{
long long a, b;
cin >> a >> b;
cout << xorTree(segmentTree, a, b) << endl;
}
}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 ... |
