1759: 多少个元素比它大 二分

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
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);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值