Given an array of integers Arr. The task is to count the number of triplets (i, j, k) such that Ai ^ Ai+1 ^ Ai+2 ^ …. ^ Aj-1 = Aj ^ Aj+1 ^ Aj+2 ^ ….. ^ Ak, and 0 < (i, j, k) < N , where N is the size of the array.
Where ^ is the bitwise xor of two numbers.
Input: Arr = [5, 2, 7]
The triplets are (0, 2, 2) since 5 ^ 2 = 7 and (0, 1, 2) since 2 ^ 7 = 5.
Input: Arr = [3, 6, 12, 8, 6, 2, 1, 5]
- Let’s simplify the given expression :
Ai ^ Ai + 1 ^ ...Aj - 1 = Aj ^ Aj + 1 ^ ...Ak Taking XOR with Aj ^ Aj + 1 ^ ...Ak on both sides Ai ^ Ai + 1 ^ ...Aj - 1 ^ Aj ^ Aj + 1 ^ ...Ak = 0
So a subarray [i, k] having XOR 0 will have k – i triplets, because any j can be selected from [i+1, k] and the triplet will satisfy the condition.
- The problem now reduces to finding lengths of all subarray whose XOR is 0 and for each such length L, add L – 1 to the answer.
- In the prefix XOR array if at 2 indices, say L and R, the prefix XOR value is same – then it means that the XOR of subarray [L + 1, R] = 0.
- To find the count, we will store the following :
Say we are at index i, and the prefix XOR at i = x. count[x] = Frequency of x in prefix XOR array before i ways[x] -> For each all j < i, if prefixXor[j] = x, then ways[x] += (j+1)
These can be used to count the triplets using the formula :
Triplets += count[x] * i - ways[x]
Below is the implementation of the above approach:
Time Complexity : O(N)
- Find smallest number n such that n XOR n+1 equals to given k.
- Count the pairs in an array such that the difference between them and their indices is equal
- Array containing power of 2 whose XOR and Sum of elements equals X
- Minimize count of unequal elements at corresponding indices between given arrays
- Choose X such that (A xor X) + (B xor X) is minimized
- Maximum sub-sequence sum such that indices of any two adjacent elements differs at least by 3
- Count maximum occurrence of subsequence in string such that indices in subsequence is in A.P.
- Puzzle | Place numbers 1 to 9 in a Circle such that sum of every triplet in straight line is 15
- Largest number M having bit count of N such that difference between their OR and XOR value is maximized
- Check if maximum difference between indices of Non-Zero Elements is greater than X
- Count subarrays such that remainder after dividing sum of elements by K gives count of elements
- Count of elements which are equal to the XOR of the next two elements
- Value to be subtracted from array elements to make sum of all elements equals K
- Count triplet pairs (A, B, C) of points in 2-D space that satisfy the given condition
- Find a permutation such that number of indices for which gcd(p[i], i) > 1 is exactly K
- Lexicographically Smallest Permutation of length N such that for exactly K indices, a[i] > a[i] + 1
- Permutation of first N positive integers such that prime numbers are at prime indices
- Maximize the number of indices such that element is greater than element to its left
- Permutation of first N positive integers such that prime numbers are at prime indices | Set 2
- Largest subsequence such that all indices and all values are multiples individually
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. 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.