CSES - Aalto Competitive Programming 2024 - wk4 - Mon - Results
Submission details
Task:Xor sum
Sender:ZDHKLV
Submission time:2024-09-23 16:26:37 +0300
Language:C++ (C++11)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2--details

Code

#include <bits/stdc++.h>
using namespace std;
#define MAXN 200000
#define SQRSIZE 400
long long arr[MAXN]; // original array
long long block[SQRSIZE]; // decomposed array
long long block_size; // block size
void sqrt_decomposition_update(int index, long long value) {
int block_number = index / block_size;
block[block_number] ^= value - arr[index];
arr[index] = value;
}
// Time Complexity : O(sqrt(n))
int sqrt_decomposition_query(int left, int right) {
int sum = 0;
while (left < right and left % block_size != 0 and left != 0) {
sum ^= arr[left];
left++;
}
while (left + block_size - 1 <= right) {
sum ^= block[left / block_size];
left += block_size;
}
while (left <= right) {
sum ^= arr[left];
left++;
}
return sum;
}
void sqrt_decomposition_preprocess(int input[], int n) {
int block_index = -1;
block_size = sqrt(n);
for (int i = 0; i < n; i++) {
arr[i] = input[i];
if (i % block_size == 0)
block_index++;
block[block_index] ^= arr[i];
}
}
int main() {
int n, q;
cin >> n >> q;
int *input = new int[n];
for (int i = 0; i < n; i++)
cin >> input[i];
sqrt_decomposition_preprocess(input, n);
vector<long long> output;
for (int i = 0; i < q; i++) {
int a, b;
cin >> a >> b;
long long o = sqrt_decomposition_query(a-1, b-1);
output.push_back(o);
}
for (long long o : output)
cout << o << endl;
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:

input
200000 200000
921726510 307633388 992247073 ...

correct output
834756431
130379787
403037296
308618218
784778243
...

user output
(empty)