ZCMU-1679-查找2(二分上界)

来源:互联网 发布:淘宝助理发布宝贝教程 编辑:程序博客网 时间:2024/06/14 07:58

1679: 查找2

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 253  Solved: 89
[Submit][Status][Web Board]

Description

给你一个长度是n的序列A,然后,有m次询问,每次询问是一个数字X,请你告诉我X在序列A中有多少个数是不大于它的

Input

第一行 ,n,m,(n,m<=100000)

第二行n个数(每个数<=1000)

第三行m个数

Output

输出答案

Sample Input

5 4
2 5 4 3 5
2 5 8 9

Sample Output

1
5
5
5

【解析】
数据太大,普通模拟肯定超时...注意它是求不大于它的有几个所以就要用二分找上界了,把时间复杂度缩小。
#include<iostream>#include<string>#include<cstdio>#include<algorithm>using namespace std;int lower_bound1(int *A, int x, int y, int v){    int m;    while (x < y)    {        m = x + (y - x) / 2;        if (A[m]<=v)            x=m+1;        else            y=m;    }    return x;}int main(){    int n,m,p,k,i,q;    while(~scanf("%d%d",&n,&m))    {        int a[n];        for(i=0;i<n;i++)            scanf("%d",&a[i]);        sort(a,a+n);        for(i=0;i<m;i++)        {            scanf("%d",&q);        p=lower_bound1(a,0,n,q);        printf("%d\n",p);        }    }    return 0;}

0 0