1
var xorQueries = function (arr, queries) {
2
let n = arr.length;
3

4
while ((n & (n - 1)) != 0) {
5
n++;
6
}
7

8
const len = n;
9
const tree = new Array(len * 2).fill(0);
10

11
build(tree, 1, 0, len - 1);
12

13
const res = [];
14

15
for (let i = 0; i < queries.length; i++) {
16
const [start, end] = queries[i];
17

18
const xor = query(tree, 1, 0, len - 1, start, end);
19

20
res.push(xor);
21
}
22

23
return res;
24

25
function build(tree, segmentIdx, segmentStart, segmentEnd) {
26
if (segmentStart === segmentEnd) {
27
tree[segmentIdx] = arr[segmentStart];
28
return;
29
}
30

31
const mid = (segmentStart + segmentEnd) >> 1;
32
build(tree, segmentIdx * 2, segmentStart, mid);
33
build(tree, segmentIdx * 2 + 1, mid + 1, segmentEnd);
34

35
tree[segmentIdx] = tree[segmentIdx * 2] ^ tree[segmentIdx * 2 + 1];
36
return;
37
}
38

39
function query(tree, node, nodeStart, nodeEnd, queryStart, queryEnd) {
40
if (queryStart <= nodeStart && nodeEnd <= queryEnd) {
41
return tree[node];
42
}
43
if (nodeEnd < queryStart || queryEnd < nodeStart) {
44
return 0;
45
}
46

47
const mid = (nodeStart + nodeEnd) >> 1;
48

49
const leftXor = query(tree, node * 2, nodeStart, mid, queryStart, queryEnd);
50
const rightXor = query(
51
tree,
52
node * 2 + 1,
53
mid + 1,
54
nodeEnd,
55
queryStart,
56
queryEnd
57
);
58

59
return leftXor ^ rightXor;
60
}
61
};
62
``;

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0