Given an array A of non-negative integers, where . The task is to count number of distinct possible results obtained by taking the bitwise OR of all the elements in all possible Subarrays.
Input: A = [1, 2] Output: 3 Explanation: The possible subarrays are , , [1, 2]. These Bitwise OR of subarrays are 1, 2, 3. There are 3 distinct values, so the answer is 3. Input: A = [1, 2, 4] Output: 6 Explanation: The possible distinct values are 1, 2, 3, 4, 6, and 7.
The Naive approach is to generate all possible subarrays and take bitwise OR of all elements in the subarray. Store each result in set and return length of the set.
We can make the above approach better. The Naive approach is to calculate all possible result where, res(i, j) = A[i] | A[i+1] | … | A[j]. However we can speed this up by taking note of the fact that res(i, j+1) = res(i, j) | A[j+1]. At the kth step, say we have all of the res(i, k) in some set pre. Then we can find the next pre set (for k -> k+1) by using res(i, k+1) = res(i, k) | A[k+1].
However, the number of unique values in this set pre is atmost 32, since the list res(k, k), res(k-1, k), res(k-2, k), … is monotone increasing, and any subsequent values that are different from previous must have more 1’s in it’s binary representation which can have maximum of 32 ones.
Below is the implementation of above approach.
Time Complexity: O(N*log(K)), where N is the length of A, and K is the maximum size of elements in A.
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.
- Count of subarrays having exactly K distinct elements
- Count subarrays having total distinct elements same as original array
- Sum of bitwise OR of all subarrays
- Sum of bitwise AND of all subarrays
- Number of subarrays have bitwise OR >= K
- Sum of Bitwise-OR of all subarrays of a given Array | Set 2
- Bitwise operations on Subarrays of size K
- Subarrays with distinct elements
- Find N distinct numbers whose bitwise Or is equal to K
- Check if an Array is made up of Subarrays of continuous repetitions of every distinct element
- Total pairs in an array such that the bitwise AND, bitwise OR and bitwise XOR of LSB is 1
- Count of subarrays with sum at least K
- Count pairs with bitwise OR less than Max
- Count subarrays with same even and odd elements
- Count subarrays with non-zero sum in the given Array
- Count subarrays with sum equal to its XOR value
- Count subarrays with Prime sum
- Count of all possible bitonic subarrays
- Count the number of subarrays having a given XOR
- Count pairs with Bitwise XOR as ODD number
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.