题目描述
给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过。
输入
第一行两个整数 n 和m。
第二行n个正整数(1<=n<= 100000)
第三行m个整数(1<=m<=100000)
输出
一共m行,若出现则输出YES,否则输出NO
样例输入
4 2
2 1 3 4
1 9
样例输出
YES
NO
提示
所有数据都不超过10^8
先对输入数据排序,再用二分查找进行查找。
#include<bits/stdc++.h>
using namespace std;
long long m,n,a[100001],b[100001];
int cz(int x,int y,int z)
{
int m=x+(y-x)/2;
if(x>y)
return -1;
else
{
if(a[m]==z)
return 1;
else if(a[m]>z)
return cz(x,m-1,z);
else
return cz(m+1,y,z);
}
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(cz(1,m,b[i])==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
用正常算法:
用二分查找: