1
var xorQueries = function (arr, queries) {4
while ((n & (n - 1)) != 0) {9
const tree = new Array(len * 2).fill(0);11
build(tree, 1, 0, len - 1);15
for (let i = 0; i < queries.length; i++) {16
const [start, end] = queries[i];18
const xor = query(tree, 1, 0, len - 1, start, end);25
function build(tree, segmentIdx, segmentStart, segmentEnd) {26
if (segmentStart === segmentEnd) {27
tree[segmentIdx] = arr[segmentStart];31
const mid = (segmentStart + segmentEnd) >> 1;32
build(tree, segmentIdx * 2, segmentStart, mid);33
build(tree, segmentIdx * 2 + 1, mid + 1, segmentEnd);35
tree[segmentIdx] = tree[segmentIdx * 2] ^ tree[segmentIdx * 2 + 1];39
function query(tree, node, nodeStart, nodeEnd, queryStart, queryEnd) {40
if (queryStart <= nodeStart && nodeEnd <= queryEnd) {43
if (nodeEnd < queryStart || queryEnd < nodeStart) {47
const mid = (nodeStart + nodeEnd) >> 1;49
const leftXor = query(tree, node * 2, nodeStart, mid, queryStart, queryEnd);50
const rightXor = query(59
return leftXor ^ rightXor;