二分基础二分查找基础
描述
在一个升序序列中,查找给定值是否存在,如果存在输出YES,否则输出NO。
输入描述
第一行一个整数n,表示升序序列的长度(1<n≤107) 。
第二行包含n个整数,升序序列各元素。所有元素取值区间(0~1010)。
第三行一个整数m,表示要查询数值的个数(1<m<105)。
接下来m行,每行一个整数,表示要查找数字。查找数字取值( 0~1010 )。
输出描述
m行,每行YES或NO,如果存在输出YES,否则输出NO。保持输入顺序。
样例输入 1
5 1 1 3 6 1024 2 1000 6
样例输出 1
NO YES
#include<bits/stdc++.h>
using namespace std;
int a[1000009];
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>m;
sort(a+1,a+n+1);
for(int i=1;i<=m;i++){
int j,l=1,r=n,mid=0;
cin>>j;
bool flag=false;
while(l<=r){
mid=(l+r)/2;
if(a[mid]==j){
cout<<"YES\n";
flag=true;
break;
}
else if(a[mid]>j)r=mid-1;
else l=mid+1;
}
if(flag==false)cout<<"NO\n";
}
return 0;
}