3091. 二分查找

Easy二分查找

时间限制:2000 ms

内存限制:256 MiB

题面

第 1 行输入一个整数 n(1≤n≤1000),第 2 行输入 n 个由一个空格分隔的 int 整数到一个数组中,第 3 行输入一个 int 整数 m。

对数组按升序排序,然后使用二分查找算法找出 m 是排序后数组中的第几个元素(这里计数从 1 开始)。找不到时,输出 “not found”。假设输入时数组中的各个元素值均不相同。

Note: 二分查找算法(Binary Search )

m 与数组中间元素进行比较,确定是否相等,不是的话,则可能在前半部或后半部。如此反复,直至找到或者确定不在该数组中。

例如:1 3 5 7 53 355 3432 中找 3

3 与中间的那个元素 7 进行比较 : 1 3 5 7 53 355 3432 3

3 比 7 小,因此在前半部查找 : 1 3 5 3

Binary Search vs Sequential (Linear) Search

BS:比较次数最多 log2n,必须是排好序的

SS: 比较次数最多 n,不一定是排好序的

参考资料:

http://en.wikipedia.org/wiki/Binary_search

例如:输入:

7

3432 1 3 355 7 53 5

3

输出:

2

又如:输入:

7

3432 1 3 355 7 53 5

-3

输出:

not found

输入格式

第 1 行输入一个整数 n(1≤n≤1000)。

第 2 行输入 n 个由一个空格分隔的 int 整数到一个数组中。数组中的各个元素值均不相同。

第 3 行输入一个 int 整数 m。

输出格式

在一行中输出 m 是排序后数组中的第几个元素(这里计数从 1 开始)。找不到时,输出 “not found”。

样例

输入

7
3432 1 3 355 7 53 5
3

输出

2