输入 n(n ≤ 10^6)个不超过 10^9的单调不减的(就是后面的数字不小于前面的数字)非负整数 a_1,a_2,…,a_n,然后进行 m(m ≤ 10^5 ) 次询问。 对于每次询问,给出一个整数 q(q ≤ 10^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
输出样例 2:
1 2 -1
代码如下: (是经典的二分查找)
def BinarySearch(x):
left, right = 0, len(lst) - 1
count = -1
while left <= right:
mid = (left + right) // 2
if lst[mid] == x:
count = mid + 1
if lst[mid] < x:
left = mid + 1
else:
right = mid - 1
return count
n, m = map(int, input().split())
lst = list(map(int, input().split()))
lst2 = list(map(int, input().split()))
for i in range(m):
a = lst2[i]
print(BinarySearch(a), end=' ')