二分查找
题目描述
输入正整数n(1<=n<=100000),然后输入n个整数的序列ai,然后输入整数m(1<=n<=10000),表示有m个询问,之后输入m个整数bi,查询bi是否在ai在出现过,如果出现过输出yes,没出现过输出no。
输入格式
数据第一行为一个整数n,第二行n个整数,第三行一个整数m。
第四行m个整数。
输出格式
共m行,对于每个询问输出yes或no。
输入样例
10
1 9 3 4 7 9 10 15 32 57
4
4 1 38 97
输出样例
yes
yes
no
no
限制与约定
时间限制:1s
空间限制:128MB
#include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<cstdio> using namespace std; int a[100001],b; int main() { int n,m; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); cin>>m; for(int i=1;i<=m;i++) { cin>>b; int l=1,r=n; while(l<r) { int t=(l+r)>>1; if(b<a[t]) r=t; if(b>a[t]) l=t+1; if(b==a[t]) break; } if(a[(l+r)>>1]==b) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }