二分查找

题目描述

输入正整数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;
}

 

posted @ 2019-07-24 18:04  寒方  阅读(189)  评论(0编辑  收藏  举报