http://pipioj.online/problem.php?id=1436
思路:将
L
、
R
L、R
L、R转换为二进制表示,从高位开始枚举,显然每一位有四种情况(其实只有三种情况,因为R>=L),当
R
i
=
1
R_i=1
Ri=1且
L
i
=
0
L_i=0
Li=0时,我们可以把所有的
R
j
R_j
Rj设为
0
0
0,
L
j
L_j
Lj设为
1
1
1(j>i),这就是最优解。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
using ll=long long;
ll L,R;
int main()
{
scanf("%lld%lld",&L,&R);
ll ans=1ll<<60;
while(ans)
{
if((R&ans)&&!(L&ans))
{
ans=(ans<<1)-1;
break;
}
ans>>=1;
}
printf("%lld\n",ans);
return 0;
}