http://pipioj.online/problem.php?id=1436
アイデア:L、RL、Rを組み合わせるLとRはバイナリ表現に変換され、上位ビットから列挙されます。Ri= 1 R_i = 1の場合、明らかに、各ビットには4つのケースがあります(実際、R> = Lであるため、3つのケースしかありません)。R私=1およびLi = 0 L_i = 0L私=0で、すべてのR jR_jを取ることができますRJ00に設定0、L j L_jLJ設定1 11(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;
}