Codeforces-600B Queries about less or equal elements(二分)

来源:互联网 发布:淘宝抢单软件 编辑:程序博客网 时间:2024/05/29 13:38

You are given two arrays of integers a andb. For each element of the second array bj you should find the number of elements in arraya that are less than or equal to the valuebj.
Input

The first line contains two integers n, m (1 ≤ n, m ≤ 2·105) — the sizes of arraysa and b.

The second line contains n integers — the elements of arraya ( - 109 ≤ ai ≤ 109).

The third line contains m integers — the elements of arrayb ( - 109 ≤ bj ≤ 109).

Output

Print m integers, separated by spaces: thej-th of which is equal to the number of such elements in arraya that are less than or equal to the valuebj.

Examples
Input
5 41 3 5 7 96 4 2 8
Output
3 2 1 4
Input
5 51 2 1 2 53 1 4 1 5
Output
4 2 4 2 5
二分 需注意输出为0的情况.
#include<stdio.h>#include<algorithm>using namespace std;int a[200005];int b[200005];int i,m,n;int f(int k,int l,int r){    int mid;    while (r-l>1)    {        mid=(r+l)/2;        if (a[mid]>k)        {            r=mid;        }        else        {            l=mid;        }    }
     return l;
}int main(){
    scanf("%d%d",&m,&n);    for (i=0;i<m;i++)    {        scanf("%d",&a[i]);
    }    for (i=0;i<n;i++)    {        scanf("%d",&b[i]);    }    sort(a,a+m);    for (i=0;i<n;i++)    {        if (b[i]>=a[m-1]) {printf("%d ",m); continue;}        if (b[i]<a[0]) {printf("%d ",0); continue;}        printf("%d ",f(b[i],0,m-1)+1);    }
}
0 0
原创粉丝点击