P2249 【深基13.例1】查找(洛谷题面)
题目
题目描述:
输入 n 个不超过 109 的单调不减的(就是后面的数字不小于前面的数字)非负整数 a1,a2,…,an,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 −1 。
输入格式:
第一行 2 个整数 n 和 m,表示数字个数和询问次数。
第二行 n 个整数,表示这些待查询的数字。
第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。
输出格式:
输出一行,m 个整数,以空格隔开,表示答案。
数据范围与说明:
数据保证,1≤n≤106,0≤ai,q≤109,1≤m≤105
本题输入输出量较大,请使用较快的 IO 方式。
输入输出样例 #1
输入:
1 2 3
| 11 3 1 3 3 3 5 7 9 11 13 15 15 1 3 6
|
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <bits/stdc++.h> using namespace std; int main() { int n, m; scanf("%d %d", &n, &m); vector<int> arr(n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } while (m--) { int x; scanf("%d", &x); auto it = lower_bound(arr.begin(), arr.end(), x); int idx = it - arr.begin(); if (it == arr.end() || *it != x) { printf("-1 "); } else { printf("%d ", idx+1); } } return 0; }
|