AT_abc294_c

题意

给定长度为 \(n\) 的序列 \(a\) 和长度为 \(m\) 的序列 \(b\),序列 \(c\) 为这两个序列连在一起组成的。求 \(a\)\(b\) 中的每个元素在 \(c\) 中分别是第几小。

思路

STL 的练手题。输入时将 \(a\)\(b\) 中的元素存入 \(c\) 中,然后使用 sort 从小到大排序,最后再使用 lower_bound 函数查找即可。

代码实现十分简洁:

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int n,m,a[1000001],b[1000001],c[2000001],cnt;

int main()
{
	cin >> n >> m;
	for( int i = 1 ; i <= n ; i ++ )
		cin >> a[i],c[ ++ cnt ] = a[i];
	for( int i = 1 ; i <= m ; i ++ )
		cin >> b[i],c[ ++ cnt ] = b[i];
	sort( c + 1 , c + cnt + 1 );
	for( int i = 1 ; i <= n ; i ++ )
		cout << lower_bound( c + 1 , c + cnt + 1 , a[i]) - c  << ' ';
	cout << endl;
	for( int i = 1 ; i <= m ; i ++ )
		cout << lower_bound( c + 1 , c + cnt + 1 , b[i]) - c  << ' ';
	return 0;
} 
posted @ 2024-01-20 18:04  liyilang2021  阅读(3)  评论(0编辑  收藏  举报