P2249 【深基13.例1】查找
第一行 22 个整数 nn 和 mm,表示数字个数和询问次数。
第二行 nn 个整数,表示这些待查询的数字。
第三行 mm 个整数,表示询问这些数字的编号,从 11 开始编号。
输出格式
输出一行,mm 个整数,以空格隔开,表示答案。
输入输出样例
输入 #1
11 3 1 3 3 3 5 7 9 11 13 15 15 1 3 6
输出 #1
1 2 -1
#include <bits/stdc++.h>
#include <algorithm>
//<algorithm>头文件调用lower_bound()
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
int arr[n];
for(int i = 0 ; i < n ; i++)
{
cin >> arr[i];
}
int tar[m];
for(int i = 0 ; i < m ; i++)
{
cin >> tar[i];
}
int ans[m];
//输入题目
int w = -1;
//查找的数据并非与tar[]中完全相等时的返回值
for(int i = 0 ; i < m ; i++)
{
if(arr[lower_bound(arr,arr+n,tar[i]) - &arr[0]] == tar[i])
//判断:arr[(查找地址-数组首地址)==序号]是否等于target
{
cout << lower_bound(arr,arr+n,tar[i]) - &arr[0] +1;
}
//是的话输出地址之间的差(序号)
else
{
cout << w;
}
//否的话输出返回值-1
cout << " ";
//统一输出的空格,否则会不通过
}
return 0;
}