[计蒜客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;
}