文件详细信息

下载本文件

本文件的大小为 611 字节。

#include<cstdio>
#include<cstring>
typedef long long ll;
int l,r,num;
int f[32][64];
int dfs(int digit,int diff,int limit,int zero){
	if(digit==-1)return diff>=32;
	if(!limit&&!zero&&f[digit][diff]!=-1)return f[digit][diff];
	int ans=0,d=limit?((num>>digit)&1):1;
	for(int i=0;i<=d;i++)ans+=dfs(digit-1,diff+(i?-1:zero?0:1),limit&&d==i,zero&&i==0);
	if(!limit&&!zero)f[digit][diff]=ans;
	return ans;
}
int solve(int n){
	num=n;
	int bit=0;
	while(n)bit++,n>>=1;
	memset(f,-1,sizeof(f));
	int ans=dfs(bit,32,1,1);
	return ans;
}
int main(){
	scanf("%d%d",&l,&r);
	printf("%d\n",solve(r)-solve(l-1));
	return 0;
}