/ Vijos / 题库 /

二分查找

二分查找

问题背景

(以下内容仅供参考)
二分查找是一个十分有用的算法,他可以用logn的时间查找到值,他的思想为如下几步:
1.在一个递增的数组中n为第一个数位置m为最后一个数位置。
2.把目标值k与数组中间位置的数a[(n+m)/2]比较。
3.如果k>an=(n+m)/2+1m不变再返回第二步继续查找。
如果k<an不变,m=(n+m)/2-1再返回第二步继续查找。
如果k=a则输出位置。
如果n=m则输出无此值。
当然这只是一种说法,还有其他写法。如果看不懂就请去直接在互联网查找(说实话我也看不懂)。

题目描述

现给一个递减数组an,并给定数组长度n,和查找数m,再给出m个目标值k,输出k是数组中的第几个(下标从1开始)。

输入格式

输入文件为2+m行,第一行为二个整数数量n和查找数m,第二行为n个整数,接下来m行位目标值。

输出格式

输出文件为m行每行一个整数代表k的位置或者none代表没有。

样例输入

5 1
9 7 5 3 2
7

样例输出

2

数据范围

30%数据,n <= m <= 10^3
70%数据,n <= m <= 10^4
100%数据,n <= m <= 2*10^6

限制

每个测试点时间0.5秒,内存128MiB

信息

ID
1026
难度
8
分类
(无)
标签
(无)
递交数
148
已通过
12
通过率
8%
上传者