Given the array arr of positive integers and the array queries where queries[i] = [Li, Ri], for each query i compute the XOR of elements from Li to Ri (that is, arr[Li] xor arr[Li+1] xor ... xor arr[Ri] ). Return an array containing the result for the given queries.
Example 1:
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:
Input: arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
Output: [8,0,4,4]
Constraints:
1 <= arr.length <= 3 * 10^4
1 <= arr[i] <= 10^9
1 <= queries.length <= 3 * 10^4
queries[i].length == 2
0 <= queries[i][0] <= queries[i][1] < arr.length
class Solution:
    def xorQueries(self, arr: List[int], queries: List[List[int]]) -> List[int]:
        n = len(arr)
        out=[]
        tree = [0]*(2*n)
        for i in range(n):
            tree[i+n] = arr[i]
        for i  in range(n-1,0,-1):
            tree[i] = tree[i << 1]^tree[i << 1 | 1]
        for q in queries:
            res = 0
            l = q[0]+n
            r = q[1]+n+1
            while l < r:
                if l & 1:
                    res = res^tree[l]
                    l=l+1
                if r & 1:
                    r=r-1
                    res = res^tree[r]
                l>>=1
                r>>=1
            out.append(res)
        return out
class Solution:
    def xorQueries(self, arr: List[int], queries: List[List[int]]) -> List[int]:
        n = len(arr)
        out=[]
        tree = [0]*(2*n)
        for i in range(n):
            tree[i+n] = arr[i]
        for i  in range(n-1,0,-1):
            tree[i] = tree[i << 1]^tree[i << 1 | 1]
        for q in queries:
            res = 0
            l = q[0]+n
            r = q[1]+n+1
            while l < r:
                if l & 1:
                    res = res^tree[l]
                    l=l+1
                if r & 1:
                    r=r-1
                    res = res^tree[r]
                l>>=1
                r>>=1
            out.append(res)
        return out