我们定义一个区间 [l, r][l,r] 的魔力值为下列三个值中的最大值。
l \oplus rl⊕r,其中 \oplus⊕ 表示异或,c++ 中是 ^ 这个操作符。
如果 l \ne rl≠r,令 mid=int(\frac{l + r}{2})mid=int(2l+r),[l, mid][l,mid] 的魔力值。
如果 l \ne rl≠r,令 mid=int(\frac{l + r}{2})mid=int(2l+r),[mid + 1, r][mid+1,r] 的魔力值。
请你帮忙求出区间 [l, r]
[l,r] 的魔力值
#include<iostream>
using namespace std;
long long magic(int l,int r){
int a=0,b=0,c=0;
a=l^r;
if(l!=r){
b=magic(l,(l+r)/2);
c=magic((l+r)/2+1,r);
}
if(a>=b && a>=c)return a;
else if(b>=a && b>=c)return b;
else return c;
}
int main(){
int l,r;
cin>>l>>r;
cout<<magic(l,r);
}