• 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;
    }
  • 相关阅读:
    哥也能写KMP了——实现strstr()
    面试归来,感觉无望,下次再战
    Pow(x, n)
    Length of Last Word
    后缀数组应用
    2倍倍增算法构造后缀数组
    跳台阶问题
    求无序数组中第二大的数--快速选择
    单源最短路径问题
    全局下的isFinite
  • 原文地址:https://www.cnblogs.com/candy99/p/5986376.html
Copyright © 2020-2023  润新知