题意:给范围l,r选两个数亦或最大是多少。
思路:找到第一个l和r二进制下不相同的位置i,然后答案就是2^(i+1)-1,因为一个取0一个取1之后,后面的位置全部选1和全部选0,就是这样:01111111...和1000000...
#include<cstdio> #include<cmath> #include<iostream> #include<cstring> #include<algorithm> #define ll long long ll read(){ ll t=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} return t*f; } int main(){ ll l=read(),r=read(),ans=0; for (int i=60;i>=0;i--){ if (((l>>i)&1)^((r>>i)&1)){ ans=(ll)(1LL<<(i+1))-1; break; } } printf("%I64d ",ans); return 0; }