题目链接;
题目描述:
给出一个n位数升序排列的数列,然后q个查询,每个查询问指定的区间覆盖了数列中几个数?
解题思路:
二分枚举区间的起始点和终点在数列中的位置。
upper_bound() 返回数列中第一个大于所查询数的位置,或者没有大于所查询的数返回数列长度(越界)
lower_bound() 返回数列中第一个等于或者大于所查询数的位置,或者没有等于,大于所查询数返回数列长度(越界)
哦,对对对!还有噢,不能用cin, cout输入,会TLE的,亲试~
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 #define LL long long 9 #define maxn 10001010 #define esp 1e-1211 #define PI acos(-1.0)12 13 int a[maxn];14 15 int main ()16 {17 int T, L = 1;18 cin >> T;19 while (T --)20 {21 int n, q;22 23 scanf ("%d %d", &n, &q);24 25 for (int i=0; i