提交时间:2024-10-22 15:07:58
运行 ID: 33772
//60 #include<bits/stdc++.h> using namespace std; #define int long long int l,r; set<int>s; map<pair<int,int>,int>mp; void dfs(int p,int sum){ if(p>r){ if(sum) s.insert(sum); return; } dfs(p+1,sum|p); dfs(p+1,sum); } void write(int x){ if(x==0){ putchar('0'),putchar('\n'); return; } int stk[20],tot=0; while(x)stk[++tot]=x%10,x/=10; while(tot)putchar(stk[tot--]^48); putchar('\n'); } void slv(){ s.clear(); dfs(l,0); write(s.size()); } void slv1(){ int x=r; int cnt=0; while(x)x>>=1,cnt++; x=1; while(cnt)x<<=1,cnt--; x--; int ans=0; for(int i=l;i<=x;i++){ int sum=0; for(int j=l;j<=r;j++){ if((j|i)==i)sum|=j; } if(i==sum)ans++; } write(ans); } void read(int &x){ x=0; char c=getchar(); while(!isdigit(c))c=getchar(); while(isdigit(c))x=x*10+c-'0',c=getchar(); } signed main(){ //freopen("or.in","r",stdin); //freopen("or.out","w",stdout); int T; read(T); while(T--){ read(l),read(r); // if(mp.find({l,r})!=mp.end())cout<<mp[{l,r}]<<endl; if(r-l<=5) slv(); else slv1(); } return 0; }