Maximum XOR value of a pair from a range in C++



Problem statement

Given a range [L, R], we need to find two integers in this range such that their XOR is maximum among all possible choices of two integers

If the given range is L = 1 and R = 21 then the output will be 31 as − 31 is XOR of 15 and 16 and it is maximum within range.

Algorithm

1. Calculate the (L^R) value 2. From most significant bit of this value add all 1s to get the final result

Example

#include <bits/stdc++.h> using namespace std; int getMaxXOR(int L, int R){    int LXR = L ^ R;    int msbPos = 0;    while (LXR) {       msbPos++;       LXR >>= 1;    }    int maxXOR = 0;    int two = 1;    while (msbPos--) {       maxXOR += two;       two <<= 1;    }    return maxXOR; } int main(){    int L = 1;    int R = 21;    cout << "Result = " << getMaxXOR(L, R) << endl;    return 0; }

Output

When you compile and execute the above program. It generates the following output −

Result = 31
Updated on: 2020-02-10T10:00:19+05:30

828 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements