Description
qw喜欢上了一个美丽的女孩,并勇敢向她表白。但女神喜欢算法厉害的男生,便给他出了一道题:
给定包含n 个整数的数列a 和m 个询问,每个询问包含两个整数L ,R ,对于每一个询问,要求输出数列中有多少个数ai ,满足L≤a2i≤R ,即有多少个数平方后取值范围在[L,R] 之间。
单身二十年的qw非常想谈恋爱,你能帮帮他吗?
Input
多组数据。
第一行给出数据组数T(1≤T≤50 )
每组数据首先给定两个整数n ,m ,表示数列中数的个数和询问个数。(1≤n,m≤50000 )
随后一行给出n 个整数 a1,a2,a3...an (1≤ai≤1e9 )
随后m 行,每行两个整数 L , R ,表示当前询问的数值范围区间。(1≤L≤R≤1e9 )
Output
对于每个询问,单独输出一行,包含一个整数,表示数列中满足条件的数个数
Sample Input
1
5 3
1 2 3 4 5
1 4
4 9
1 25
Sample Output
2
2
5
题解:
二分搜啊
开long long
排序
二分搜搜
然后就哦了
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int t,n,m;
long long a[50000+100],temp,l,r;
int main()
{ scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&temp);
a[i]=temp*temp;
}
sort(a+1,a+n+1);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&l,&r);
printf("%d\n",upper_bound(a+1,a+n+1,r)-lower_bound(a+1,a+n+1,l));
}
}
return 0;
}