题目描述
给定 n 个数,现在有 m 个询问,每个询问都是一个数字 x ,你需要回答小于等于 x 的数字有多少个。
输入
一行两个正整数 n,m ,接下来一行 n 个数。
接下来 m 行,每行一个数字 x 代表询问。
输出
m 行,每行一个非负整数代表答案。
样例输入
5 5
1 2 3 4 5
3
6
1
9
4
样例输出
3
5
1
5
4
思路:我们可以先对数组排序,然后利用指针来求答案。所以针对每个询问,因为列表是连续地址,可以用第一个大于基准数字的地址减去列表第一个元素的地址,也就是列表的地址,来求出数量。
程序:
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100000],x;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n);
for(int i=0;i<m;i++){
scanf("%lld",&x);
printf("%d\n",upper_bound(a,a+n,x)-a);
}
return 0;
}