牛客網 查詢(二分查詢、北郵機試)

sunlanchang發表於2019-01-31

題目描述

輸入陣列長度 n 輸入陣列 a[1…n] 輸入查詢個數m 輸入查詢數字b[1…m] 輸出 YES or NO 查詢有則YES 否則NO 。
輸入描述:
輸入有多組資料。
每組輸入n,然後輸入n個整數,再輸入m,然後再輸入m個整數(1<=m,n<=100)。

輸出描述

如果在n個陣列中輸出YES否則輸出NO。
示例1

輸入

5
1 5 2 4 3
3
2 5 6

輸出

YES
YES
NO

Solution

二分查詢板題。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1111;
int num[maxn];
int low_bound(int first, int last, int value)
{
    while (first < last)
    {
        int mid = first + (last - first) / 2; // 防溢位
        if (value > num[mid])
            first = mid + 1;
        else
            last = mid;
    }
    return first;
}
int main()
{
    // freopen("in.txt", "r", stdin);
    int n, m;
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < n; i++)
            scanf("%d", &num[i]);
        sort(num, num + n);
        scanf("%d", &m);
        for (int i = 0; i < m; i++)
        {
            int value;
            scanf("%d", &value);
            int index = low_bound(0, n, value);
            if (value == num[index])
                puts("YES");
            else
                puts("NO");
        }
    }
    return 0;
}

相關文章