题解 CF484A 【Bits】

版权声明:版权所有,转载请标明博文出处。 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 ;
}

猜你喜欢

转载自blog.csdn.net/HQG_AC/article/details/84526727
今日推荐