HDU 最大的位或
分析
一道思维题,本来想好好写写的,结果调了某道题一天,心情全无,算了吧。
其实挺简单的,首先选区间右端点一定不会差,因为它最高位上有个1,然后开始枚举每一位就行,尽量让每一位都填上1,如果超出了区间范围就不填。
#include<iostream>
#define ll long long
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
ll l,r;
cin>>l>>r;
for(int i=0;(1ll<<i|l)<=r;i++)
l|=1ll<<i;
cout<<(l|r)<<'\n';
}
return 0;
}
int - > long long
0 - > 100