1435 Xor Queries Of A Subarray
1435 Xor Queries Of A Subarray
XOR Queries of a Subarray 
You are given an array arr of positive integers. You are also given the array queries where queries[i] = [lefti, righti].
For each query i compute the XOR of elements from lefti to righti (that is, arr[lefti] XOR arr[lefti + 1] XOR … XOR arr[righti] ).
Return an array answer where answer[i] is the answer to the ith query.
Example 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
**Input:** arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
**Output:** [2,7,14,8]
**Explanation:**
The binary representation of the elements in the array are:
1 = 0001
3 = 0011
4 = 0100
8 = 1000
The XOR values for queries are:
[0,1] = 1 xor 3 = 2
[1,2] = 3 xor 4 = 7
[0,3] = 1 xor 3 xor 4 xor 8 = 14
[3,3] = 8
Example 2:
1
2
3
4
**Input:** arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
**Output:** [8,0,4,4]
Constraints:
1
2
3
4
1 <= arr.length, queries.length <= 3 * 104
1 <= arr[i] <= 109
queries[i].length == 2
0 <= lefti <= righti < arr.length
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* xorQueries(int* arr, int arrSize, int** queries, int queriesSize, int* queriesColSize, int* returnSize) {
int *result = malloc(sizeof(int)*queriesSize);
*returnSize = queriesSize;
for (int i = 0 ; i < queriesSize; i ++) {
int a = queries[i][0];
int b = queries[i][1];
int res = arr[a];
a += 1;
while(a <= b) {
res = res ^ arr[a];
a ++ ;
}
result[i] = res;
}
return result;
}
This post is licensed under CC BY 4.0 by the author.