#include <algorithm>
#include <iostream>
using namespace std;

int arr[105];

bool RS(int target,int l,int r){
    while(l<r){
        int mid = r+l+1>>1; //+1的目的是防止数组长度等于2的时候进入死循环
        if(arr[mid]<=target){
            l=mid;
        }else {
            r=mid-1; //-1的目的是防止数组长度等于2的时候进入死循环
        }
    }

    if(arr[l]==target){
        return true;
    }
    return false;
}



int main() {
    int n,m;
    while (cin >> n) { // 注意 while 处理多个 case
        for(int i=0;i<n;i++){
            cin>>arr[i];
        }

        sort(arr, arr+n);

        cin>>m;
        for(int i=0;i<m;i++){
            int tar;
            cin>>tar;
            if(RS(tar, 0, n-1)){
                cout<<"YES"<<"\n";
            }else {
                cout<<"NO"<<endl;
            }
        }
    }
}

算法思路:二分查找

关键点:注意边界条件,防止进入死循环;