समस्या कथन
एक श्रेणी [एल, आर] को देखते हुए, हमें इस श्रेणी में दो पूर्णांकों को खोजने की जरूरत है ताकि उनका एक्सओआर दो पूर्णांकों के सभी संभावित विकल्पों में से अधिकतम हो
अगर दी गई रेंज L =1 और R =21 है तो आउटपुट 31 होगा क्योंकि -31 15 और 16 का XOR है और यह रेंज के भीतर अधिकतम है।
एल्गोरिदम
1. Calculate the (L^R) value 2. From most significant bit of this value add all 1s to get the final result
उदाहरण
#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;
} आउटपुट
जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है -
Result = 31