找数
描述
给一个长度为n的单调递增的正整数序列,即序列中每一个数都比前一个数大。有m个询问,每次询问一个x,问序列中最后一个小于等于x的数是什么?
输入
第一行两个整数n,m。1≤�≤100001≤n≤10000,≤�≤10000≤m≤10000。
接下来一行n个数,表示这个序列。
接下来m行每行一个数,表示一个询问。
输出
输出共m行,表示序列中最后一个小于等于x的数是什么。假如没有输出-1。
输入样例 1
5 3 1 2 3 4 6 5 1 3
输出样例 1
4 1 3
#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int result = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] <= target) {
result = nums[mid];
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
for (int i = 0; i < m; i++) {
int x;
cin >> x;
int result = binarySearch(nums, x);
cout << result << endl;
}
return 0;
}