Given two arrays of positive integers. Select two sub-arrays of equal size from each array and calculate maximum possible OR sum of the two sub-arrays.
Note: Let f(x, l, r) is the OR sum of all the elements in the range [l, r] in array x.
Examples :
Input : A[] = {1, 2, 4, 3, 2}
B[] = {2, 3, 3, 12, 1}
Output : 22
Explanation: Here, one way to get maximum
sum is to select sub-array [l = 2, r = 4]
f(A, 2, 4) = 2|4|3 = 7
f(B, 2, 4) = 3|3|12 = 15
So, f(A, 2, 4) + f(B, 2, 4) = 7 + 15 = 22.
This sum can be achieved in many other ways.
Input : A[] = {1, 2, 2}
B[] = {2, 1, 3}
Output : 6
Observe the operation of Bitwise OR operator. If we take two integers X and Y, then (X|Y >= X). It can be proved by taking some examples. Lets derive a formula using the above equation.
and also
from the above two equations,
So, we get maximum sum when we take the OR of the whole array ->
Below is the implementation of above approach:
C++
// CPP program to find maximum OR sum#include <bits/stdc++.h>using namespace std;// function to find maximum OR sumvoid MaximumSum(int a[], int b[], int n){ int sum1 = 0, sum2 = 0; // OR sum of all the elements // in both arrays for (int i = 0; i < n; i++) { sum1 |= a[i]; sum2 |= b[i]; } cout << sum1 + sum2 << endl;}// Driver Codeint main(){ int A[] = { 1, 2, 4, 3, 2 }; int B[] = { 2, 3, 3, 12, 1 }; int n = sizeof(A) / sizeof(A[0]); MaximumSum(A, B, n); return 0;} |
Java
// Java program to find maximum OR sumclass GFG { // function to find maximum OR sumstatic void MaximumSum(int a[], int b[], int n) { int sum1 = 0, sum2 = 0; // OR sum of all the elements // in both arrays for (int i = 0; i < n; i++) { sum1 |= a[i]; sum2 |= b[i]; } System.out.println(sum1 + sum2);}// Driver codepublic static void main(String arg[]){ int A[] = {1, 2, 4, 3, 2}; int B[] = {2, 3, 3, 12, 1}; int n = A.length; MaximumSum(A, B, n);}}// This code is contributed by Anant Agarwal. |
Python3
# Python 3 program to # find maximum OR sum# function to find # maximum OR sumdef MaximumSum(a, b, n): sum1 = 0 sum2 = 0 # OR sum of all the # elements in both arrays for i in range(0, n): sum1 |= a[i] sum2 |= b[i] print(sum1 + sum2)# Driver CodeA = [ 1, 2, 4, 3, 2 ]B = [ 2, 3, 3, 12, 1 ]n = len(A) MaximumSum(A, B, n)# This code is contributed by Smitha Dinesh Semwal |
C#
// C# program to find maximum OR sumusing System;class GFG { // function to find maximum OR sum static void MaximumSum(int []a, int []b, int n) { int sum1 = 0, sum2 = 0; // OR sum of all the elements // in both arrays for (int i = 0; i < n; i++) { sum1 |= a[i]; sum2 |= b[i]; } Console.WriteLine(sum1 + sum2); } // Driver code public static void Main() { int []A = {1, 2, 4, 3, 2}; int []B = {2, 3, 3, 12, 1}; int n = A.Length; MaximumSum(A, B, n); }}// This code is contributed by Vt_m. |
PHP
<?php// PHP program to find maximum OR sum// function to find maximum OR sumfunction MaximumSum($a, $b, $n){ $sum1 = 0; $sum2 = 0; // OR sum of all the elements // in both arrays for ($i = 0; $i < $n; $i++) { $sum1 |= $a[$i]; $sum2 |= $b[$i]; } echo ($sum1 + $sum2)."\n";}// Driver Code$A = array(1, 2, 4, 3, 2 );$B = array(2, 3, 3, 12, 1 );$n = sizeof($A) / sizeof($A[0]);MaximumSum($A, $B, $n);// This code is contributed by mits ?> |
Javascript
<script>// JavaScript program to find maximum OR sum// function to find maximum OR sumfunction MaximumSum(a, b, n) { let sum1 = 0, sum2 = 0; // OR sum of all the elements // in both arrays for (let i = 0; i < n; i++) { sum1 |= a[i]; sum2 |= b[i]; } document.write(sum1 + sum2);}// Driver code let A = [1, 2, 4, 3, 2]; let B = [2, 3, 3, 12, 1]; let n = A.length; MaximumSum(A, B, n); </script> |
22
Time Complexity: O(n)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
