计蒜客--T1560--二分查找(一)

题目描述:
蒜头君手上有个长度为 nn的数组 A。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数 x是否在数组 A 中
输入描述:
第一行输入两个整数 n 和 m,分别表示数组的长度和查询的次数。

接下来一行有 n 个整数 ai 。接下来 m 行,每行有 1个整数 x,表示蒜头君询问的整数。
1≤n,m≤105 ,0≤x≤106 。
输出描述:
对于每次查询,如果可以找到,输出"YES",否则输出"NO"。
输入:
10 5
1 1 1 2 3 5 5 7 8 9
0
1
4
9
10
输出:
NO
YES
NO
YES
NO
题意:
字面意思
题解
二分。
代码:

#include
#include
#include
#include
using namespace std;

const int maxn = 100000 + 5;
int a[maxn];
int n,q;

bool bsearch(int x){
    int l = 0;
    int r = n - 1;
    while(l <= r){
        if(a[r] < x || a[l] > x) return false;
        int mid = (l + r) >> 1;
        if(a[mid] == x) return true;
        else if(a[mid] > x) r = mid - 1;
        else l = mid + 1;
    }
}

int main(){
    while(scanf("%d%d",&n,&q)!=EOF){
        for(int i = 0; i < n; i ++){
            scanf("%d",&a[i]);
        }
        sort(a,a + n);
        while(q--){
            int x;
            scanf("%d",&x);
            bool flag = bsearch(x);
            if(flag) printf("YES\n");//cout<<"YES"<
            else printf("NO\n"); //cout<<"NO"<
        }
    }
    return 0;
}

你可能感兴趣的:(二分,算法)