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;
}
posted @ 2020-05-06 22:24  An_Fly  阅读(139)  评论(0编辑  收藏  举报