• CodeForces 485C Bits[贪心 二进制]


    C. Bits

    time limit per test1 second

    memory limit per test256 megabytes

    inputstandard input

    outputstandard output

    Let's denote as  the number of bits set ('1' bits) in the binary representation of the non-negative integer x.

    You are given multiple queries consisting of pairs of integers l and r. For each query, find the x, such that l ≤ x ≤ r, and  is maximum possible. If there are multiple such numbers find the smallest of them.

    Input

    The first line contains integer n — the number of queries (1 ≤ n ≤ 10000).

    Each of the following n lines contain two integers li, ri — the arguments for the corresponding query (0 ≤ li ≤ ri ≤ 1018).

    Output

    For each query print the answer in a separate line.

    Examples

    input

    3

    1 2

    2 4

    1 10

    output

    1

    3

    7

    Note

    The binary representations of numbers from 1 to 10 are listed below:

    110 = 12

    210 = 102

    310 = 112

    410 = 1002

    510 = 1012

    610 = 1102

    710 = 1112

    810 = 10002

    910 = 10012

    1010 = 10102


     

    题意:求l和r之间二进制1的个数最多的数字x


     

    首先证明x一定在l的基础上

    然后从低位贪心把0变成1

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <queue>
    using namespace std;
    typedef long long ll;
    inline ll read(){
        char c=getchar();ll x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    ll T,l,r;
    int main(int argc, const char * argv[]) {
        T=read();
        while(T--){
            l=read();r=read();
            ll t=1;
            while(l<r){
                if((l|t)>r) break;
                l|=t;
                t<<=1;
            }
            printf("%I64d
    ",l);
        }
        return 0;
    }
  • 相关阅读:
    20180209-json&pickle&shelve模块
    20180209-shutil模块
    20180209-sys模块
    20180209-os模块
    20180115-Xcode创建多个工程协同开发
    20180108-递归函数
    20180105-Python中dict的使用方法
    Python-编码这趟浑水
    20171218-编程语言的介绍
    20180119-01-RACSignal的基础
  • 原文地址:https://www.cnblogs.com/candy99/p/5986376.html
Copyright © 2020-2023  润新知