算法核心
利用vector 容器的find_if()函数可以自定义compare比较方法的特点,自定义一个,一旦输入的数字,超过要比较的数字就返回true的函数。
每次找到的是题目要求的数字的后一位,因此返回cout<<*(it-1)即可。
int INDEX;//要比较的数字
bool compare(int i) {
if (i > INDEX)
{
return true;
}
return false;
}
题目描述
给定一定长度为 n 的单调递增的正整数序列,即序列中的每一个数都比前一个大,有 m 个询问,每次询问一个 x,问序列中最后一个小于等于 x 的数是什么?
n<=100000n<= 100 000n<=100000
输入描述
给定一个长度为 n 的单调递增的正整数序列,即序列中的每一个数都比前一个数大,有 m 个询问, 每次询问一个 x。
输出描述
输出共 m 行,表示序列中最后一个小于等于 x 的数都是多少。如果没有输出 - 1。
样例输入
Copy to Clipboard
5 3 1 2 3 4 6 5 1 3
样例输出
Copy to Clipboard
4 1 3
代码如下:
#include<bits/stdc++.h>
using namespace std;
/*
*
5 3
1 2 3 4 6
5
1
3
*/
int INDEX;
bool compare(int i) {
if (i > INDEX)
{
return true;
}
return false;
}
int main()
{
int n;
int m;
cin >> n >> m;
vector<int> a(n, 0);
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < m; i++)
{
cin >> INDEX;
if (INDEX > a[a.size() - 1])
{
cout << -1 << endl;
continue;
}
vector<int>::iterator it = find_if(a.begin(), a.end(), compare);
cout << *(it-1) << endl;
}
return 0;
}