# 【深基13.例1】查找
## 题目描述
输入 $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
### 样例输入 #1
```
11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6
```
### 样例输出 #1
```
1 2 -1
```
## 提示
$10^6$ 规模的数据读入,请用 scanf。用 cin 会超时。
在开始做的时候,觉得这就是简单的一个二分搜索,但发现没这么简单,本人在试的时候出了挺多问题,
n,m = input().split()
n = int(n)
m = int(m)
list = [int(i) for i in input().split()]
query = [int(i) for i in input().split()]
len = len(list)
for i in query:
min=0
max=len-1
flag=0
while(min<=max):
media = int((min + max) / 2)
if(i==list[0]):
print(1,end=' ')
flag=1
break
if(i<list[0] or i>list[-1]):
break
if(i<list[media]):
max=media-1
continue
if(i>list[media]):
min=media+1
continue
if(i==list[media]):
max = media
while(i==list[media] and i==list[media-1]):
media=int((min+max)/2)
if(i==list[media]):
max=media
continue
if(i>list[media]):
min=media+1
media=max
continue
print(media+1,end=' ')
flag=1
break
if(flag==0):
print(-1,end=' ')
这样的话一直在最后一个测试点过不去,后来参考了一个大佬的博客,发现其实不需要在相等时再进行讨论,而是继续用二分搜索,该博客链接如下: