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

Educational Codeforces Round 2_B. Queries about less or equal elements

2015-11-28 00:58 579 查看
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 array
a 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

二分||

#include <bits/stdc++.h>
using namespace std;

typedef long long int LL ;

const int maxn = 2e5+100;

LL a[maxn], b[maxn], c[maxn];
int n, m;
int erfen(LL p) {
int le = 1, ri = n, mid;
mid = (le+ri)/2;
for (int i = 1; i<300; i++) {
if (p>=a[mid]) le = mid;
else if (p<a[mid]) ri = mid;
mid = (le+ri)/2;
}
if (p == a[mid] && p!=a[ri])	return mid;
else if (p == a[mid] && p==a[ri])	return ri;
if (p>a[mid] && p<a[ri])	return mid;
else if (p>a[mid] && p >= a[ri]) return ri;
else if (p<a[mid] && p<a[le])	return mid-1;
else if (p<a[mid] && p>=a[le])	return le;
}

int main() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));

cin >> n >> m;
for (int i = 1; i<=n; i++)
cin >> a[i];
for (int i = 1; i<=m; i++)
cin >> b[i];
sort(a+1, a+n+1);
//sort(b, b+m);
int num = 0;
for (int i = 1; i<=m; i++) {
c[num++] = erfen(b[i]);
}
for (int i = 0; i<num-1; i++)
cout << c[i] << " ";
cout << c[num-1] << endl;
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: