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()
{
int A[10001],B[50001];
int middle,left,right;
int n,k;
cin>>n;
for(int i=0;i<n;i++) cin>>A[i];
cin>>k;
for(int i=0;i<k;i++) cin>>B[i];
for(int i=0;i<k;i++)
{
int flag=0;
left=0,right=n-1;
while(left<=right)
{
middle=(left+right)/2;
if(B[i]==A[middle])
{
flag=1;;
break;
}
if(B[i]>A[middle])left=middle+1;
else right=middle-1;
}
if(flag==1)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}