#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;
}
}
}
}
算法思路:二分查找
关键点:注意边界条件,防止进入死循环;

京公网安备 11010502036488号