洛谷-P2249 【深基13.例1】查找

洛谷-P2249 【深基13.例1】查找

原题链接:https://www.luogu.com.cn/problem/P2249


题目描述

输入 \(n(n\le10^6)\) 个不超过 \(10^9\) 的单调不减的(就是后面的数字不小于前面的数字)非负整数 \(a_1,a_2,\dots,a_{n}\),然后进行 \(m(m\le10^5)\) 次询问。对于每次询问,给出一个整数 \(q(q\le10^9)\),要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1 。

输入格式

第一行 2 个整数 n 和 m,表示数字个数和询问次数。

第二行 n 个整数,表示这些待查询的数字。

第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。

输出格式

m 个整数表示答案。

输入输出样例

输入 #1

11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6

输出 #1

1 2 -1 

C++代码

#include <iostream>
using namespace std;

int main() {
    int n, m, l, r, mid;
    cin >> n >> m;
    int a[n], q[m], ans[m];
    for (int i=0; i<n; ++i)
        cin >> a[i];
    for (int i=0; i<m; ++i)
        cin >> q[i];
    for (int i=0; i<m; ++i) {
        l = 0;
        r = n - 1;
        while (l < r) {
            mid = (l + r) / 2;
            if (a[mid] >= q[i])
                r = mid;
            else
                l = mid + 1;
        }
        if (l == r)
            ans[i] = a[l]==q[i]?l+1:-1;
    }
    for (int i=0; i<m; ++i)
        cout << ans[i] << ' ';
    cout << endl;
    return 0;
}
posted @ 2020-12-17 10:00  yuzec  阅读(577)  评论(0编辑  收藏  举报