标签:io os for sp div on bs amp ef
题意就是给你一个区间[l,r],求这个区间中化成二进制形式1最多的数,如果有多解输出最小值.
贪心即可,把l化为二进制,把最右边不是0的变成1.
例如 19 30
10011 11110
第一步 10011-->10111
第二步 10111-->11111大于30退出循环 答案即是10111
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
int t;
for(scanf("%d",&t);t;t--){
unsigned long long lef,rig;
cin>>lef>>rig;
for (int i=0;i<64;i++){
if (((1LL<<i)&lef)==0){
if (((1LL<<i)|lef)<=rig){
lef |= (1LL<<i);
}else{
break;
}
}
}
cout<<lef<<endl;
}
return 0;
}
Codeforces Round #276 (Div. 1)Bits
标签:io os for sp div on bs amp ef
原文地址:http://www.cnblogs.com/nhywieza/p/4079314.html