Problem1822--二分查找

1822: 二分查找

[Creator : ]
Time Limit : 2.000 sec  Memory Limit : 128 MB

Description

给定一个长度为 n 的数列 a,其中的整数互不相同,且从小到大依次排列,下标从 1 开始。 
给定 m 次询问,对每次询问,给定一个整数 x 取自数列 a,输出 xa 中的下标。 
现希望你实现二分查找函数 get(a, x, l, r) 完成上述目标,函数返回一个整数 pos,表示 xa[l……r] 中的下标。 
函数内部实现如下: 
    1、若 l == r,则 lxa[l……r] 中的下标,返回 l 
    2、设 mid = (l + r) / 2,若 a[mid] ≥ x,则 xa[l……mid] 中,返回 get(a, x, l, mid) 
    3、否则 xa[mid+1……r] 中,返回 get(a, x, mid+1, r)

Input

输入第一行包含两个整数,依次为 nm,分别表示数列 a 的长度以及询问的次数。(1 ≤ n, m ≤ 106) 
第二行包含 n 个整数,表示数列 a(-109 ≤ ai ≤ 109,且 a1<a2<……<an) 
接下来 m 行,每行包含一个整数 x,即询问的 x(x ∈ {a1, a2, ……, an}) 
同一行的整数之间用一个空格隔开。文件以EOF结束。

Output

每组输出一行,包含一个整数,为 xa[l……r] 中的下标

Sample Input Copy

10 3
2 4 6 8 10 11 13 15 19 20
8
13
20

Sample Output Copy

4
7
10

Source/Category