输入一个整数n和n个整数,保证这n个整数已经按照从小到大进行排序。
然后输入一个整数q(q <= 100000)代表q次查询。接下来q行,每行含有一个整数m,代表一次查询。对于每次查询,使用二分查找判断m是否在之前输入的n个整数中出现过。如果出现,输出一行"Yes",否则输出"No"。
Input
第一行:一个整数n(n <= 100000)。 接下来n行,每行一个整数ai(1 <= ai <= 10^9)。 接下来一行,一个整数q。 接下来q行,每行输入一个整数x(1 <= x <= 10^9)。
Output
q行字符串,每行为"Yes"或"No"。
#include<stdio.h>
int main()
{
int n,a[100010],q,x;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&q);
// 二分查找
for(int j=0;j<q;j++)
{
int l=0,r=n-1,mid;
//l为第一个,r为最后一个数
//查找区间为[l,r]
int f=0;
scanf("%d",&x);
while(l<=r)//l>r时候,也就是区间[l,r]不存在,循环结束
{
mid=(l+r)/2;//mid为中点
if(x==a[mid])
{
f=1;//标记一下
break;
}
else if(x<a[mid])
r=mid-1;//接下来查找[l,mid-1]
else if(x>a[mid])
l=mid+1;//接下来查找[mid+1,r]
}
if(f==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}