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

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

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

输入
​ 输入数据共 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;
}