題目鏈接:Codeforces 484A Bits
題目大意:給定區間l,r,找到一個數x,保證x在區間上,並且要求x的bitcount盡量大的前提下數值盡量小。
解題思路:默認x為全1的二進制數,每次從最高為判斷,看最高位的1變為0後大於r,就將該為變成0;落在區間上則即
為要照的答案;小於l則表示該為不能為0.
#include
#include
#include
#include
using namespace std;
typedef long long ll;
ll l, r;
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
scanf("%lld%lld", &l, &r);
ll ans = (1LL<<62)-1;
for (int i = 61; i >= 0; i--) {
if (r >= ans && ans >= l)
break;
if ((ans^(1LL<