热搜:NVER node 开发 php

A. Bits(Codeforces Round #276(div1)_html/css_WEB-ITnose

2024-11-19 12:40:02
A. Bits(Codeforces Round #276(div1)_html/css_WEB-ITnose

A. 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 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.

Sample test(s)

input

31 22 41 10

output

137

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次打div1,就赶上cf挂了,不算rating,在25分钟交了一发,判了半个多小时,最后返回个RE,竟然位运算爆int了,过了A题就睡觉去了

给出一段区间的左端点和右端点,求这段区间的二进制的1最多的最小的。

先把左区间L化为二进制,再把左区间的二进制的从最小位开始,每位变为1,因为这是在当前1的个数中最小的且大于L的。直到大于右区间R。

代码:

#include #include #include #include using namespace std;long long a[100];int main(){    long long l,r;    int n;    scanf("%d",&n);    while(n--)    {        scanf("%I64d%I64d",&l,&r);        memset(a,0,sizeof(a));        int cou=0;        long long ans=l;        while(l>0)        {            a[cou++]=(l%2);            l=l/2;        }        for(int i=0;; i++)        {            a[i]=1;            long long temp=0;            for(int j=0; j