二分查找
问题背景
(以下内容仅供参考)
二分查找是一个十分有用的算法,他可以用logn
的时间查找到值,他的思想为如下几步:
1.在一个递增的数组中n
为第一个数位置m
为最后一个数位置。
2.把目标值k与数组中间位置的数a[(n+m)/2]
比较。
3.如果k>a
则n=(n+m)/2+1
,m
不变再返回第二步继续查找。
如果k<a
则n
不变,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%
- 上传者