Home >Web Front-end >HTML Tutorial >A. Bits(Codeforces Round #276(div1)_html/css_WEB-ITnose

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

WBOY
WBOYOriginal
2016-06-24 11:54:391320browse

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 <iostream>#include <cstdio>#include <cstring>#include <algorithm>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<max(cou,i+1); j++)            {                temp+=(a[j]<<j);            }            if(temp<=r)                ans=temp;            else                break;        }        printf("%I64d\n",ans);    }    return 0;}




Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn