版权声明:版权所有,转载请标明博文出处。 https://blog.csdn.net/HQG_AC/article/details/84526727
题意:
求在l到r中1数量最多的数。
思路:
很明显是贪心。
我们很明显发现在位权小的位置放1能够使得最终结果最少。
做法:
初始的时候是1
于是我们就从位0到iinf放1,如果>r就break
代码:
就这么短,。
#include <bits/stdc++.h>
using namespace std ;
#define int long long
int n,l,r ;
signed main(){
scanf("%lld",&n) ;
while(n--){
scanf("%lld%lld",&l,&r) ;
for (int i=0;;i++){
if ((l|(1ll<<i))>r) break ;
l|=(1ll<<i) ;
}
printf("%lld\n",l) ;
}
return 0 ;
}