zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 2_B. Queries about less or equal elements

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


  • 相关阅读:
    Hive小结
    Redis小结
    Hbase小结
    Rdd/DataFrame/DataSet 小结
    spark杂记2
    shiyan
    stanford推荐阅读目录
    超市收银系统之——3
    超市收银系统之超市类——4
    超市收银系统_仓库类——2
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194821.html
Copyright © 2011-2022 走看看