Maximizing Xor
Given a range [L, R] and find the maximal value of A xor B where L <= A <= B <= R.
Input:
L
R
Output:
the maximal value mentioned in the problem statement.
Example:
Input:
10
15
Output:
7
Solution
There are two methods intuitively:
 the basic one using twolevel loop to search for the maximal value, which is very easy to implement but with bad performance and when the range is huge, it’s hard to solve within an ideal time;
 math technique to find out the underlying rules: remove the prefix same part and then set all the suffix to 1bit. Actually if we remove the prefix with same bit then the left should be:
 0a1a2a3…
 1b1b2b3…
and we are trying to get as many 1bit as possible for each xor operation. There will be two cases: ai is zero and bi is zero  just turn ai to one (since it will be smaller then B); ai is one and bi is also one  just turn bi to zero (it will also be smaller then B); as a result, we can always set all the suffix to 1bit and then our job now is to find the suffix and then turn all the suffix bits to 1bit.


The other more efficient way to turn all the suffix to 1bit.


Always welcome new ideas and practical
tricks, just leave them in the comments!