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
- Maximum sub-sequence sum such that indices of any two adjacent elements differs at least by 3
- Choose X such that (A xor X) + (B xor X) is minimized
- 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
- Check if maximum difference between indices of Non-Zero Elements is greater than X
- Largest number M having bit count of N such that difference between their OR and XOR value is maximized
- 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
- Count of elements which are equal to the XOR of the next two elements
- Count subarrays such that remainder after dividing sum of elements by K gives count of elements
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.