【CODEFORCES】 C. Bits

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:11   1006   0
C. Bits
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard 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 lxr, 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≤liri≤1018).

Output

For each query print the answer in a separate line.

Sample test(s)
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


题解:这一题挺有意思的...因为是最小的但是1又要是最多的,所以可以想到从左端点用一个1从右往左加,直到构造出一个比r大的为止。
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

long long n,l,r;

int main()
{
    long long k,p=1;
    scanf("%I64d",&n);
    while (n--)
    {
        p=1;
        scanf("%I64d%I64d",&l,&r);
        if (l==r)
        {
            printf("%I64d\n",l);
            continue;
        }
        while (l<=r)
        {
            k=l | p;
            if (k>r) break;
            l=k;
            p<<=1;
        }
        printf("%I64d\n",l);
    }
    return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP