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 n;
int m;
int k;
int a[10000];
bool binarysearch(int a[],int n,int k);
int main()
{
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
cin>>m;
for(int i=0; i<m; i++)
{
cin>>k;
if(binarysearch(a,n,k))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}
bool binarysearch(int a[],int n,int k)
{
int st=0,ed=n-1;
int mid;
while(st<=ed)
{
mid=(st+ed)/2;
if(a[mid]<k)
{
st=mid+1;
}
else if(a[mid]>k)
{
ed=mid-1;
}
else
{
return true;
}
}
return false;
}