洛谷笔记 - P2249 【深基 13. 例 1】查找
练点基础。
关于 “二分查找”
二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。
折半查找的前提是数组中的数据已经进行了排序。
利用数组已排序的特性,从数组的中间开始搜寻,如果这个数小于所搜寻的数,则该数左边的数一定都小于要搜寻的对象,所以无需浪费时间在左边的数中搜寻,直接搜寻右边的数;如果搜寻的数大于所搜寻的对象,则右边的数无需再搜寻,直接搜寻左边的数。如此类推,直到找到该元素,如果找不到则返回 - 1。
题目描述
输入 个不超过 的单调不减的(就是后面的数字不小于前面的数字)非负整数 ,然后进行 次询问。对于每次询问,给出一个整数 ,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 。
输入格式
第一行 个整数 和 ,表示数字个数和询问次数。
第二行 个整数,表示这些待查询的数字。
第三行 个整数,表示询问这些数字的编号,从 开始编号。
输出格式
输出一行, 个整数,以空格隔开,表示答案。
样例 #1
样例输入 #1
1 | 11 3 |
样例输出 #1
1 | 1 2 -1 |
提示
数据保证,,,
本题输入输出量较大,请使用较快的 IO 方式。
代码
一个需要注意的点
题面上特别强调了一点:本题输入输出量较大,请使用较快的 IO 方式,所以本题的代码内主要使用 scanf()
与 printf()
函数,用法详见 scanf ()/printf () 的输出用格式参数
1 | // Problem: P2249 【深基13.例1】查找 |