[计蒜客20191103B] 饮料

小 B 出门游玩,他现在走到了 \(n\) 家饮品店前,第 \(i\) 家买饮料的花费为$ cost_i$ ,他只能去花费不超过自己所带钱数额的店,但他现在不确定自己兜里有多少钱,所以现在给出 \(m\) 次询问,请问如果他有 \(a_i\)元,他有几家饮品店可选

输入格式
第一行两个整数分别表示 \(n,m\)

第二行 \(n\) 个整数,第 \(i\) 个表示 \(cost_i\)
接下来 \(m\) 行,每行一个整数表示询问

输出格式
对于每次询问回答小 B 有几家饮品店可选

数据范围
对于 \(30\%\) 的数据,\(1 \leq n,m \leq 1000\)

对于另外 \(20\%\) 的数据, \(cost_i\)全部相同

对于 \(100\%\) 的数据, \(1 \leq n,m,cost_i \leq 10^6,1 \leq a_i \leq 10^9\)输出时每行末尾的多余空格,不影响答案正确性

样例输入

5 2
1 2 3 4 5
3
5

样例输出

3
5

开一个前缀和数组记录在\(i\)以下的cost有多少家店,每次询问时回答即可。

#include<cstdio>
using namespace std;
const int N=1e6+5;
int n,m,x;
int a[N],s[N];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		s[x]++;
	}
	for(int i=1;i<N;i++)
		s[i]+=s[i-1];
	while(m--)
	{
		scanf("%d",&x);
		if(x<N)
			printf("%d\n",s[x]);
		else
			printf("%d\n",n);
	}
	return 0;
}
posted @ 2022-05-16 22:28  灰鲭鲨  阅读(351)  评论(0编辑  收藏  举报