题目描述
小祖是一个爱冒险的猴子,一天它来到一个村庄,顿时,有n(1<=n<=100000)个小怪冒了出来,想把它吃了,每个小怪都有它的体力值hp(1<=hp<=maxlongint)。小祖手上有m(1<=m<=100000)个炸弹,每个炸弹威力为k(1<=k<=maxlongint),可以炸死体力小于炸弹威力所有小怪。现在它想知道,它的每一个炸弹能炸剩多少个小怪,请你编一个程序帮助它吧。
输入格式
第一行,输入一个n,代表有n个小怪n(1<=n<=100000)
第二行,有n个数,代表每个小怪的体力值hp(1<=hp<=maxlongint)
第三行,输入一个m,代表有m个炸弹m(1<=m<=100000)
接下来m行,每行一个数,代表每个炸弹威力k(1<=k<=maxlongint)
输出格式
有m行,每行一个数代表它的每一个炸弹能炸剩多少个小怪。
样例输入 复制
5 1 2 2 2 3 3 2 1 3
样例输出 复制
4 5 1
代码
#include <bits/stdc++.h>
using namespace std;
long long n,x,l,r,mid,a[1000000],y,m,L,R;
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
scanf("%lld",&m);
for (int i=1;i<=m;i++)
{
L=1,R=n,y=0,mid=0,l=0,r=0;
scanf("%lld",&x);
while(L<=R)
{
mid=(L+R)/2;
if (a[mid]<x)
{
y+=(mid-l);
l=mid;
L=mid+1;
}
else if (a[mid]>=x) R=mid-1;
}
printf ("%d\n",n-y);
}
return 0;
}