二分查找
内存限制: 64 MiB时间限制: 700 ms标准输入输出题目类型: 传统评测方式: 文本比较
题目描述
在一个单调递增的序列里查找X。
如果找到x,则返回x在数组中的位置
如果没有找到,则返回-1
输入格式
第1行:1个整数N(1<=N<=2000000), 表示元素的个数
第2行开始的若干行,每行10个空格分开的整数,总共N个整数,即为数组元素。
最后1行,1个整数X,表示要查找的元素
序列的位置从1开始编号。
输出格式
第1行:一个整数,表示x在序列中的位置。如果没有找到,则返回-1
样例
样例输入
复制5
1 3 5 7 9
7
样例输出
复制4
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 5;
int n, x, l, r, mid;
int a[maxn];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &x);
l = 1, r = n;
while(l < r) {
mid = (l + r) / 2;
if(a[mid] < x) {
l = mid + 1;
} else {
r = mid;
}
}
if(a[l] == x) {
printf("%d", l);
} else {
printf("-1");
}
return 0;
}