您的位置:首页 > 产品设计 > UI/UE

Educational Codeforces Round 2 B. Queries about less or equal elements (二分)

2016-01-01 17:04 399 查看
B. Queries about less or equal elements

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

You are given two arrays of integers a and b.
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 value bj.

Input
The first line contains two integers n, m (1 ≤ n, m ≤ 2·105)
— the sizes of arrays a and b.
The second line contains n integers
— the elements of array a ( - 109 ≤ ai ≤ 109).
The third line contains m integers
— the elements of array b ( - 109 ≤ bj ≤ 109).

Output
Print m integers,
separated by spaces: the j-th of which is equal to the number of such elements in array a that
are less than or equal to the value bj.

Sample test(s)

input
5 4
1 3 5 7 9
6 4 2 8


output
3 2 1 4


input
5 5
1 2 1 2 5
3 1 4 1 5


output
4 2 4 2 5


题意:给你一个序列A,然后一个序列B,求在序列A中小于Bi的数的个数

思路:将A序列排序,然后二分查找

总结:刚开始二分写挫了,WA了一发。。。

ac代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1000010
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
using namespace std;
ll a[MAXN];
int main()
{
int n,m;
int i;
ll b;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%I64d",&a[i]);
sort(a+1,a+n+1);
while(m--)
{
scanf("%I64d",&b);
int high=n,low=1;
int k=0;
int bz=0;
while(low<=high)
{
int mid=(low+high)/2;
if(a[mid]<=b)
low=mid+1;
//else if(a[mid]>b)
else
high=mid-1;
}
printf(m?"%d ":"%d\n",low-1);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: