1759: 多少个元素比它大
时间限制: 1 Sec 内存限制: 128 MB提交: 6 解决: 2
[ 提交][ 状态][ 讨论版] [ Edit]
题目描述
给你n个元素和m次查询,对每次查询给定一个整数x,我想知道这n个数里面有多少个数不比它小。
输入
有t组测试数据,每组数据给定两个整数n和m,下面一行有n个元素。接下来有m次查询,每次查询给定一个整数x。(1 <= n, m <= 20000,1 <= 元素 <= 10^8,1 <= x <= 10^8)。
输出
对每次查询,输出一个结果,占一行。
样例输入
1
10
5
3 4 10 99 3 7 4 2 2 2
1
5
3
10
100
样例输出
10
3
7
2
0
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[110000],i,j,k,l,m,n,ans,sum,help,cnt,cmt,p,mid;
int cmp(int a,int b)
{
return a>b;
}
int main()
{
scanf("%d",&p);
while(p--)
{
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(int nn=0;nn<m;nn++)
{
scanf("%d",&k);
if(k<=a[0])
{
printf("%d\n",n);
continue;
}
if(k>a[n-1])
{
printf("0\n");
continue;
}
int start=0;
int end=n-1;
while(start!=end)
{
mid=(start+end+1)/2;
if(a[mid]>k)
end=mid;
else if(a[mid]<k)
start=mid;
if(a[mid]==k)
break;
if(a[start]<k&&a[end]>k&&end-start==1)
{
mid=end;
break;
}
}
if(a[mid]==k)
for(i=mid;i>=0;i--)
{
if(a[i]!=k)
{
mid=i+1;
break;
}
}
printf("%d\n",n-mid);
}
}
}