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

来源:互联网 发布:中世纪2优化9大百科 编辑:程序博客网 时间:2024/06/08 11:49

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


0 0
原创粉丝点击