1001.二分查找
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
输出
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
输入样例
5
1 3 4 7 11
3
3
6
9
输出样例
Yes
No
No
提示
来源
#include<iostream>
using namespace std;
int main(){
// freopen("input.txt","r",stdin);
int i,num,a[10005],n,mid,m,left,right;
cin>>n;
for(i = 0;i < n;i++){
cin>>a[i];
}
cin>>m;
for(i = 0;i < m;i++){
cin>>num;//需要查询的数
right = n-1,left = 0;//左右区间
while(left <= right){
mid = (left + right)/2;//中间点
if(a[mid] == num){
cout<<"Yes"<<endl;
break;
}else if(a[mid] < num){//在右边
left =mid + 1;
}else{//在左边
right = mid - 1;
}
}
if(left > right){//左边界大于右边界,值不存在
cout<<"No"<<endl;
}
}
return 0;
}