zl程序教程

您现在的位置是:首页 >  其他

当前栏目

报数游戏。

2023-09-27 14:26:25 时间

题目描述
​ 路飞在和他的朋友们一起玩一个游戏。由于路飞的机智,这个游戏由路飞担任裁判。

​ 首先,路飞会给他们一人一个编号,并且每个人的编号都不相同。接下来的每一回合,会给一个数,编号不超过它的最大编号的人要报出自己的编号。如果没有人的编号比路飞给出的数要小,那么编号最小的人要报出自己的编号。每个人可以重复报号。

​ 路飞会按照一个列表顺次报出每个回合的数,他的朋友们想知道每回合报出的编号应该是多少。你能帮帮他们吗?

输入
​ 输入数据共 3 行。^

​ 第一行有两个整数 n,m(1≤n≤10 ^ 5,1≤m≤10 ^ 5) ,分别表示参与游戏的路飞朋友的个数,和游戏的回合数。​ 第二行 n 个整数 ai(1≤ai≤10^8),表示朋友们每个人的编号。对于 0≤i<j<n ,都有 ai<aj ,即他们的编号递增排列。​ 第三行 m 个整数 qi(1≤qi≤10 ^ 8) ,表示每回合路飞给的数字。

输出
​ 输出共一行 m 个整数,表示每回合报出的编号,每两个整数之间一个空格,最后一个数后面没有空格。

样例输入1
5 5
1 5 10 15 20
3 6 12 18 24
样例输出1
1 5 10 15 20

#include <iostream>
using namespace std;

int main() {
	int num[100005]={0};
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	for (int i = 0; i < m; i++) {
		int temp;
		cin >> temp;
		int l = 0, r = n - 1;
		while (l != r) {
			int mid = (l + r+1) / 2;
			if (num[mid] <= temp) {
				l = mid;
			}else  {
				r = mid - 1;
			}
		}
		if (i) cout << " ";
			cout << num[l];
	}
	return 0;
}