求调
查看原帖
求调
1382982
jikky楼主2024/9/10 15:16
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,l,r;
unsigned long long num[67];

int bit(long long a){
	int res=0;
	while(a){
		a>>=1;
		res++;
	}
	res--;
	return res;
}

int main(){
	num[1]=1;
	for(int i=2;i<=63;i++){
		num[i]=num[i-1]<<1;
		//cout<<num[i]<<" ";
	}
    //cout<<endl;
    unsigned long long ans=0;
	cin>>n>>l>>r;
	int len=bit(n);
	len++;
	unsigned long long maxx=1;
	unsigned long long t=0;
	for(int i=len;i>=1;i--){
		//cout<<i<<endl;
		if(n&num[i]){
			maxx=num[i]+num[i]-1;
			t=num[i];
			if(maxx>=l){
				if(maxx<=r){
					long long y=max(l,t);
					ans+=maxx-y+1;
				}
				else{
					long long y=max(l,t);
					ans+=r-y+1;
				}
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/9/10 15:16
加载中...