
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
C++ Queries on XOR of XORs of All Subarrays
To calculate the XOR of all the subarrays present in the given range and print it. For example
Input : arr[] = { 4, 1, 2, 3, 5 }, Q = 3 Queries q1 = { 1, 2 } q2 = { 2, 4 } q3 = { 1, 4 } Output : 0 2 0 Explanation : As the given problem states that we need to find XOR of all the subarrays present in the given range so as for query 2 the subarrays are : {1}, {2}, {3}, {1, 2}, {2, 3}, (1, 2, 3} So as you can see the number of occurrences of elements are : 1 is present 3 times 2 is present 4 times 3 is present 3 times Now as we know the property of XOR is that the numbers that are present an even number of times get canceled out so out 2 got canceled out and just the XOR of 3 and 1 remained and that was our answer.
We need to observe the pattern being formed in this problem, and then we need to implement it accordingly.
Approach to Find the Solution
In this problem, we are trying to find the in-between patterns present in the problem. When. When we see that pattern, we implement it accordingly and check the results.
Example
C++ Code for the Above Approach
#include <bits/stdc++.h> using namespace std; void ansQueries(int prefeven[], int prefodd[], int l, int r){ if ((r - l + 1) % 2 == 0) // if number of element present in the range is even cout << "0"; else{ if (l % 2 == 0) // if l is even cout << (prefeven[r] ^ prefeven[l - 1]) << "\n"; else // if l is odd cout << (prefodd[r] ^ prefodd[l - 1]) << "\n"; } } int main(){ int arr[] = {4, 1, 2, 3, 5}; int n = sizeof(arr) / sizeof(int); // size of our array int l[] = {1, 2, 1}; // given queries' left index int r[] = {2, 4, 4}; // given queries' right index int q = sizeof(l) / sizeof(int); // number of queries asked int prefodd[n] = {0}, prefeven[n] = {0}; // different prefix xor for even and odd indices for (int i = 1; i <= n; i++){ if ((i) % 2 == 0){ // if i is even then we change prefeven prefeven[i] = arr[i - 1] ^ prefeven[i - 1]; prefodd[i] = prefodd[i - 1]; }else{ prefeven[i] = prefeven[i - 1]; prefodd[i] = prefodd[i - 1] ^ arr[i - 1]; } } for (int i = 0; i < q; i++){ ansQueries(prefeven, prefodd, l[i], r[i]); } return 0; }
Output
02 0
Explanation of the Above Code
In this approach, we first observe that if the size of our range is even then our answer will be zero as every number appears even times when we print all the subarrays so by taking their XOR the answer simply will be 0 now for our next part where the size of the range is odd in this case the number that appears odd times are in even position in the given range and our answer will simply be the XORs of the numbers appearing in the even positions in the given range two we maintain two prefix arrays that contain the XORs of alternate positions as our prefeven contains XOR of all the even indices and prefodd contains XORs of all the odd indices now when we solve a query we simply need to check if our l is even or odd and give our answer accordingly.
Conclusion
In this tutorial, we solve a problem to solve the Queries on XOR of XORs of all subarrays. We also learned the C++ program for this problem and the complete approach ( Normal) by which we solved this problem. We can write the same program in other languages such as C, java, python, and other languages. We hope you find this tutorial helpful.
- Related Articles
- XOR of all subarray XORs in C++
- Sum of XOR of all subarrays in C++
- C++ Queries on XOR of Greatest Odd Divisor of the Range
- XOR Queries of a Subarray in C++
- XOR of a submatrix queries in C++
- Queries for decimal values of subarrays of a binary array in C++
- Maximize the number of subarrays with XOR as zero in C++
- Maximum subarray sum after dividing array into subarrays based on the given queries in Java
- Sum of XOR of all possible subsets in C++
- Queries on sum of odd number digit sums of all the factors of a number in C++
- Sum of All Possible Odd Length Subarrays in JavaScript
- Minimizing array sum by applying XOR operation on all elements of the array in C++
- Find All the Subarrays of a Given Array in Java
- Sum of XOR of all pairs in an array in C++
- Maximum of all Subarrays of size k using set in C++ STL
