[JRKSJ R6] Nothing
题目背景
【此处应有图】
题目描述
我们定义
f
(
x
)
f(x)
f(x) 表示
x
x
x 在
2
2
2 进制下最低的
1
1
1 的位置(你需要注意,二进制下的最低位是第 $0 $ 位)。以下是其在 C++
语言中的代码(未考虑数据类型造成的问题):
int f(int x){
int ans = 0;
while (x % 2 == 0){
x /= 2;
ans += 1;
}
return ans;
}
共有 T T T 组询问,每组询问给定区间 [ l , r ] [l,r] [l,r],求有多少个 i ∈ [ l , r ] i\in [l,r] i∈[l,r] 使得 f ( i ) < f ( i + 1 ) f(i)< f(i+1) f(i)<f(i+1)。
输入格式
第一行一个正整数
T
T
T。
接下来
T
T
T 行每行两个正整数
l
,
r
l,r
l,r 表示一次询问。
输出格式
T T T 行每行一个整数表示答案。
样例 #1
样例输入 #1
2
3 5
15 20
样例输出 #1
2
3
提示说明
数据规模
本题采用捆绑测试。
Subtask \text{Subtask} Subtask | T ≤ T\le T≤ | 特殊限制 | Score \text{Score} Score |
---|---|---|---|
1 1 1 | 1 0 5 10^5 105 | l = r l=r l=r | 10 10 10 |
2 2 2 | 1 0 4 10^4 104 | r − l ≤ 1 0 3 r-l\le10^3 r−l≤103 | 30 30 30 |
3 3 3 | 1 0 5 10^5 105 | r ≤ 1 0 6 r\le10^6 r≤106 | 20 20 20 |
4 4 4 | 1 0 5 10^5 105 | 无 | 40 40 40 |
对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 5 1\le T\le 10^5 1≤T≤105, 1 ≤ l ≤ r ≤ 1 0 18 1\le l\le r\le 10^{18} 1≤l≤r≤1018。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll find(ll l,ll r)
{
ll ans=(r-l+1)/2;
if(l%2==1&&r%2==1) ans++;
return ans;
}
int main()
{
ll t;
cin>>t;
while(t--)
{
ll l,r;
cin>>l>>r;
cout<<find(l,r)<<endl;
}
return 0;
}