题目描述
输入n个不超过10^9的单调不减的(就是后面的数字不小于前面的数字)非负整数 a1,a2,,a3...aN然后进行m次询问。对于每次询问,给出一个整数q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1 。
输入格式
第一行2个整数n和m,表示数字个数和询问次数。
第二行n个整数,表示这些待查询的数字。
第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。
输出格式
输出一行,m 个整数,以空格隔开,表示答案。
提示
本题输入输出量较大,请使用较快的 IO 方式。
思路:
很明显,这是一个二分模板题,没有什么细节,大家就练习一下吧
//二分
#include<iostream>
#include<algorithm>
#define N 1000005
using namespace std;
int a[N], b[N];
int n, m;
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < m; i++)
{
cin >> b[i];
if (!binary_search(a,a+n,b[i]))
{
cout << -1 << " ";
continue;
}
int x = lower_bound(a, a + n, b[i])-a+1;
cout << x<<" ";
}
return 0;
}