# XOR of a subarray (range of elements) | Set 2

Given an array integer arr[] of size N and Q queries. Each query is of the form (L, R), where L and R are indices of the array. The task is to find XOR value of the subarray arr[L…R].
Examples:

Input: arr[] = {2, 5, 1, 6, 1, 2, 5} query[] = {{1, 4}}
Output: 3
The XOR value of arr[1…4] is 3.

Input: arr[] = {2, 5, 1, 6, 1, 2, 5} query[] = {{0, 6}}
Output: 6
The XOR value of arr[0…6] is 6.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Here we will discuss a constant space solution, but we will modify the input array.

1. Update the input array from index 1 to N – 1, such that arr[i] store the XOR from arr to arr[i].

arr[i] = XOR(arr, arr, .., arr[i])

2. To process a query from L to R just return arr[L-1] ^ arr[R].
3. arr[L-1] = arr ^ arr ^ arr…. ^ arr[L-1]
arr[R] = arr ^ arr……arr[L-1] ^ arr[L] ^ arr[L+1]…… ^ arr[R]
arr[L-1] ^ arr[R] = arr[L] ^ arr[L+1]…. ^ arr[R]

where ^ denotes XOR

For example:

Consider the example: arr[] = { 3, 2, 4, 5, 1, 1, 5, 3 }, query[] = {{1, 4 }, { 3, 7}}
After taking XOR of consecutive elements, arr[] = {3, 1, 5, 0, 1, 0, 5, 6}
For first query {1, 4} ans = arr ^ arr = 3 ^ 1 = 2
For second query {3, 7} ans = arr ^ arr = 5 ^ 6 = 3

Below is the implementation of the above approach:

## C++

 `// C++ program to find XOR ` `// in a range from L to R ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to find XOR ` `// in a range from L to R ` `void` `find_Xor(``int` `arr[], ` `              ``pair<``int``, ``int``> querry[], ` `              ``int` `N, ``int` `Q) ` `{ ` `    ``// Compute xor from arr to arr[i] ` `    ``for` `(``int` `i = 1; i < N; i++) { ` `        ``arr[i] = arr[i] ^ arr[i - 1]; ` `    ``} ` ` `  `    ``int` `ans = 0; ` ` `  `    ``// process every query ` `    ``// in constant time ` `    ``for` `(``int` `i = 0; i < Q; i++) { ` ` `  `        ``// if L==0 ` `        ``if` `(querry[i].first == 0) ` `            ``ans = arr[querry[i].second]; ` `        ``else` `            ``ans = arr[querry[i].first - 1] ` `                  ``^ arr[querry[i].second]; ` ` `  `        ``cout << ans << endl; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 3, 2, 4, 5, ` `                  ``1, 1, 5, 3 }; ` `    ``int` `N = 8; ` `    ``int` `Q = 2; ` `    ``pair<``int``, ``int``> query[Q] ` `        ``= { { 1, 4 }, ` `            ``{ 3, 7 } }; ` ` `  `    ``// query[] ` `    ``find_Xor(arr, query, N, Q); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find XOR ` `// in a range from L to R ` `class` `GFG{ ` `     `  `static` `class` `pair ` `{  ` `    ``int` `first, second;  ` `    ``public` `pair(``int` `first, ``int` `second)  ` `    ``{  ` `        ``this``.first = first;  ` `        ``this``.second = second;  ` `    ``}  ` `}  ` ` `  `// Function to find XOR ` `// in a range from L to R ` `static` `void` `find_Xor(``int` `arr[], ` `                     ``pair querry[], ` `                     ``int` `N, ``int` `Q) ` `{ ` `     `  `    ``// Compute xor from arr to arr[i] ` `    ``for``(``int` `i = ``1``; i < N; i++) ` `    ``{ ` `       ``arr[i] = arr[i] ^ arr[i - ``1``]; ` `    ``} ` `     `  `    ``int` `ans = ``0``; ` ` `  `    ``// Process every query ` `    ``// in constant time ` `    ``for``(``int` `i = ``0``; i < Q; i++) ` `    ``{ ` `         `  `       ``// If L==0 ` `       ``if` `(querry[i].first == ``0``) ` `           ``ans = arr[querry[i].second]; ` `       ``else` `           ``ans = arr[querry[i].first - ``1``] ^ ` `                 ``arr[querry[i].second]; ` ` `  `       ``System.out.print(ans + ``"\n"``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `arr[] = { ``3``, ``2``, ``4``, ``5``, ` `                  ``1``, ``1``, ``5``, ``3` `}; ` `    ``int` `N = ``8``; ` `    ``int` `Q = ``2``; ` `     `  `    ``pair query[] = { ``new` `pair(``1``, ``4``), ` `                     ``new` `pair(``3``, ``7``) }; ` ` `  `    ``// query[] ` `    ``find_Xor(arr, query, N, Q); ` `} ` `} ` ` `  `// This code is contributed by gauravrajput1 `

## Python3

 `# Python3 program to find XOR  ` `# in a range from L to R ` ` `  `# Function to find XOR  ` `# in a range from L to R  ` `def` `find_Xor(arr, query, N, Q): ` `     `  `    ``# Compute xor from arr to arr[i] ` `    ``for` `i ``in` `range``(``1``, N): ` `        ``arr[i] ``=` `arr[i] ^ arr[i ``-` `1``] ` `         `  `    ``ans ``=` `0` `     `  `    ``# Process every query  ` `    ``# in constant time  ` `    ``for` `i ``in` `range``(Q): ` `         `  `        ``# If L == 0 ` `        ``if` `query[i][``0``] ``=``=` `0``: ` `            ``ans ``=` `arr[query[i][``1``]] ` `        ``else``: ` `            ``ans ``=` `(arr[query[i][``0``] ``-` `1``] ^  ` `                   ``arr[query[i][``1``]]) ` `        ``print``(ans) ` `     `  `# Driver code ` `def` `main(): ` `     `  `    ``arr ``=` `[ ``3``, ``2``, ``4``, ``5``, ``1``, ``1``, ``5``, ``3` `] ` `    ``N ``=` `8` `    ``Q ``=` `2` `     `  `    ``# query[] ` `    ``query ``=` `[ [ ``1``, ``4` `], ` `              ``[ ``3``, ``7` `] ] ` `               `  `    ``find_Xor(arr, query, N, Q) ` `     `  `main() ` ` `  `# This code is contributed by Stuti Pathak `

## C#

 `// C# program to find XOR ` `// in a range from L to R ` `using` `System; ` ` `  `class` `GFG{     ` `class` `pair ` `{  ` `    ``public` `int` `first, second;  ` `    ``public` `pair(``int` `first, ``int` `second)  ` `    ``{  ` `        ``this``.first = first;  ` `        ``this``.second = second;  ` `    ``}  ` `}  ` `  `  `// Function to find XOR ` `// in a range from L to R ` `static` `void` `find_Xor(``int` `[]arr, ` `                     ``pair []querry, ` `                     ``int` `N, ``int` `Q) ` `{ ` `      `  `    ``// Compute xor from arr to arr[i] ` `    ``for``(``int` `i = 1; i < N; i++) ` `    ``{ ` `       ``arr[i] = arr[i] ^ arr[i - 1]; ` `    ``} ` `      `  `    ``int` `ans = 0; ` `  `  `    ``// Process every query ` `    ``// in constant time ` `    ``for``(``int` `i = 0; i < Q; i++) ` `    ``{ ` `          `  `       ``// If L==0 ` `       ``if` `(querry[i].first == 0) ` `           ``ans = arr[querry[i].second]; ` `       ``else` `           ``ans = arr[querry[i].first - 1] ^ ` `                 ``arr[querry[i].second]; ` `  `  `       ``Console.Write(ans + ``"\n"``); ` `    ``} ` `} ` `  `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `[]arr = { 3, 2, 4, 5, ` `                  ``1, 1, 5, 3 }; ` `    ``int` `N = 8; ` `    ``int` `Q = 2; ` `      `  `    ``pair []query = { ``new` `pair(1, 4), ` `                     ``new` `pair(3, 7) }; ` `  `  `    ``// query[] ` `    ``find_Xor(arr, query, N, Q); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```2
3
```

Time Complexity: O (N + Q)
Auxiliary Space: O (1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.