0
已解决
张恩泽
高级天翼
高级天翼
2772 二分查找2
经验值:0 时间限制:1000毫秒
题目描述 Description
从一个有序的整数序列中查找整数k,如果存在输出第一次出现位置,否则输出-1。序列有重复元素,并且单调递增。
输入描述 Input Description
第一行两个整数空格分开,分别表示序列长度n以及查询次数m。
第二行输出n个整数
接下来m行,每行一个整数,表示查询的数字
输出描述 Output Description
输出m行,每行为查询数字的位置(位置从1开始算)。
样例输入 Sample Input
5 3 2 2 3 4 5 3 2 6
样例输出 Sample Output
3 1 -1
数据范围及提示 Data Size & Hint
1000<=n<=100000
1000<=m<=100000
//CODE
//#pragma GCC optimize(3)
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, k;
int a[100005];
int serch(int k) {
int l = 1, r = n;
while (l < r) {
int mid = (l + r) / 2;
if (a[mid] == k) {
return mid;
}
else if (a[mid] > k) {
l = mid + 1;
}
else {
r = mid;
}
}
if (a[l] == k) {
return l;
}
return -1;
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
while (m --) {
cin >> k;
cout << serch(k) << endl;
}
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}