题目完整链接
https://nanti.jisuanke.com/t/T1560
输入格式
第一行输入两个整数 nn 和 mm,分别表示数组的长度和查询的次数。
接下来一行有 nn 个整数 a_ia
i
。
接下来 mm 行,每行有 11 个整数 xx,表示蒜头君询问的整数。
输出格式
对于每次查询,如果可以找到,输出"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 <bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int a[maxn];
int n,m;
bool searchs(int x)
{
int l=0;
int h=n-1;
while(l<=h)
{
if(a[l]>x||a[h]<x) return false;
int mid;
mid=(l+h)>>1;
if(a[mid]==x)return true;
else if(a[mid]>x) h=mid-1;
else l=mid+1;
}
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
while(m--)
{
int x;
scanf("%d",&x);
bool flag=searchs(x);
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
方法2 :调用库里的函数
//利用 algorith 库中 binary_search 函数。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5+6;
int a[MAXN] = {};
int main() {
//读入数据
int n,m;
scanf("%d%d", &n, &m);
int i;
for (i=0; i<n; i++) {
scanf("%d", &a[i]);
}
sort(a, a+n);//排序函数
for (i=0; i<m; i++) {
int x;
scanf("%d", &x);
if (binary_search(a, a+n, x)) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}