您的位置:首页 > 其它

CF&&CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits

2018-01-05 21:56 666 查看
http://codeforces.com/contest/484/problem/A

题意:

询问[a,b]中二进制位1最多且最小的数

贪心,假设开始每一位都是1

从高位i开始枚举,

如果当前数>b,且减去1<<i后仍>=a,就减1<<i

当当前数在[a,b]之间时,输出

因为从高位开始减,所以保证当前数是最小的

#include<cstdio>
#include<iostream>

using namespace std;

typedef long long LL;

LL bit[61];

void read(LL &x)
{
x=0; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*10+c-'0'; c=getchar();  }
}

int main()
{
bit[0]=1;
for(int i=1;i<=60;++i) bit[i]=bit[i-1]<<1;
int n;
scanf("%d",&n);
LL a,b;
LL ans;
while(n--)
{
read(a); read(b);
ans=(1LL<<61)-1;
for(int i=60;i>=0;--i)
{
if(ans>b && ans-bit[i]>=a) ans-=bit[i];
if(ans>=a && ans<=b) break;
}
cout<<ans<<'\n';
}
}


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.

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: