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;
}