关于lower_bound和upper_bound:、
lower_bound返回可插入的最小位置的迭代器,即返回第一个符合条件的元素位置。
upper_bound返回可插入的最大位置的迭代器,即返回最后一个符合条件的元素位置。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main() {
int a[10] = {1,2,4,4,6,7,8,8,9};
//第一个大于等于4的位置
cout<<lower_bound(a, a+10, 4)-a<<endl;
//第一个大于4的位置或者最后一个等于4的位置。
cout<<upper_bound(a, a+10, 8)-a;
return 0;
}
答案 :
//遍历一遍,记录当中的完全平方数。
//对于每一组查询,找与左边大或等于的最近的完全平方数,找比右边大的第一个位置或等于的最远的完全平方数,然后回到原来的数组里面相减加一即可。
#include <bits/stdc++.h>
using namespace std;
int a[31622+10];
int main() {
int num,l, r;
for (int i=0;i<=31625;i++) {
a[i] = i;
}
int n;
scanf("%d", &n);
while (n--) {
scanf("%d %d", &l, &r);
int pos1 = lower_bound(a, a+31625, sqrt(l))-a;
int pos2 = upper_bound(a, a+31625, sqrt(r))-a;
// cout<<pos1<<" "<<pos2<<endl;
cout<<max(pos2-pos1,0)<<endl;
}
return 0;
}

京公网安备 11010502036488号