题意 : 求l-r之间所有数 , 表示为2进制1最多的有几个
考虑贪心 , 每次将l第一个不为0的加1 , 大于r时停止
这里有一个玄学的操作 , l = l|(l+1) , 就可以实现将第一个不为0的为加一
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL l,r; int main(){
scanf("%lld%lld",&l,&r);
while((l|(l+1))<=r) l = l|(l+1);
int ans=0; for(;l;l>>=1) ans += (l&1);
printf("%d",ans); return 0;
}