# 报数游戏

题目描述
报数游戏 首先,会给他们一人一个编号,并且每个人的编号都不相同。接下来的每一回合,会给一个数,编号超过它的最小编号的人要报出自己的编号。如果没有人的编号比给出的数要大,那么编号最大的人要报出自己的编号。每个人可以重复报号。 会按照一个列表顺次报出每个回合的数,朋友们想知道每回合报出的编号应该是多少。 输入
输入数据共 3 行。 第一行有两个整数 n,m(1≤n≤100,000,1≤m≤100,000),分别表示参与游戏的朋友的个数,和游戏的回合数。 第二行 n个整数 ai(1≤ai≤100,000,000),表示朋友们每个人的编号。对于 0≤i<j<n,都有 ai<aj,即他们的编号递增排列。 第三行 m 个整数 qi(1≤qi≤100,000,000),表示每回合给的数字。 输出
输出共一行 m 个整数,表示每回合报出的编号,每两个整数之间一个空格,最后一个数后面没有空格。

以下程序实现了这一功能,请你填补空白处内容: ```cpp #include #include #include #include using namespace std; int ai[100010], qi[100010]; int main() { int a, q; while (cin >> a >> q) { for (int i = 0; i < a; i++) cin >> ai[i]; for (int i = 0; i < q; i++) cin >> qi[i]; for (int i = 0; i < q; i++) { int left = 0, right = a - 1, mid; while (left < right) { mid = (left + right) >> 1; if (ai[mid] <= qi[i]) left = mid + 1; else right = mid; } _______________________; i ? cout << " " << ai[left - 1] : cout << ai[left - 1]; } cout << endl; } return 0; } ``` ## template ```cpp #include #include #include #include using namespace std; int ai[100010], qi[100010]; int main() { int a, q; while (cin >> a >> q) { for (int i = 0; i < a; i++) cin >> ai[i]; for (int i = 0; i < q; i++) cin >> qi[i]; for (int i = 0; i < q; i++) { int left = 0, right = a - 1, mid; while (left < right) { mid = (left + right) >> 1; if (ai[mid] <= qi[i]) left = mid + 1; else right = mid; } if (left - 1 < 0 || ai[left] < qi[i]) left++; i ? cout << " " << ai[left - 1] : cout << ai[left - 1]; } cout << endl; } return 0; } ``` ## 答案 ```cpp if (left - 1 < 0 || ai[left] < qi[i]) left++; ``` ## 选项 ### A ```cpp if (left - 1 < 0) left++; ``` ### B ```cpp if (ai[left] < qi[i]) left++; ``` ### C ```cpp if (left - 1 < 0 && ai[left] < qi[i]) left++; ```