Problem5060--查找

5060: 查找

Time Limit: 10.000 Sec  Memory Limit: 128 MB
Submit: 127  Solved: 42
[Submit] [Status] [Web Board] [Creator:]

Description

【问题描述】

输入 n(1≤n≤10^6) 个不超过 10^9的单调增的(就是后面的数字大于前面的数字)非负整数 a1,a2,…,an然后进行 m次询问。

对于每次询问,给出一个整数 q(q≤10^9),要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1 。
【输入格式】

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

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

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

【输出格式】

m 个整数表示答案。

【输入样例】

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

【输出样例】

1 2 -1 


Sample Input



Sample Output



HINT

#include <bits/stdc++.h>
usingnamespacestd;
inta[1000005];
intmain()
{
    intn;
    cin>>n;
    intk;
    cin>>k;
    for(inti=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(inti=1;i<=k;i++)
    {
        intx;
        cin>>x;
        intl=1,r=n;
        while(l<r)
        {
            intmid=l+(r-l)/2;
            if(a[mid]<x)
            {
                l=mid+1;
            }
            else
            {
                r=mid;
            }
        }
        if(a[l]!=x)
        {
            cout<<"-1"<<" ";
        }
        else
        {
            cout<<l<<" ";
        }
    }
    return0;
}

Source/Category

 

[Submit] [Status]