现在给你n个数,这n个数从小到大递增,然后问你某个数是不是在这n个数里面
输入
第一行一个n
然后是n个从小到大排列的数
然后输入一个m表示接下来有m个询问,接下来m行每行一个数,问你这个数在不在刚才给的那些数里面
1<=n<=1000000,1<=m<=1000000,其他数都是int型范围的数
输出
对于每个询问,如果询问的数在所给的数里面,就输出yes,否则输出no
Input
5
1 2 5 6 10
3
2
5
7
Output
yes
yes
no
#include< iostream >
using namespace std;
#define N 1000000
int a[N];
int main()
{
int n,m,i,mid,left,right,flag,x;
while( scanf("%d",&n)!=EOF)
{
for(i =0;i< n; i ++)
scanf("%d",&a[i]);
scanf("%d",&m);
while(m--)
{
scanf("%d",&x);
left=0;
right=n-1;
flag=0;
while(left<=right)
{
mid=left ((right-left)/2);
if(a[mid]==x)
{
flag=1;
printf("yes\n");
break;
}
else if(a[mid]>x)
right=mid-1;
else
left=mid 1;
}
if(flag==0)
printf("no\n");
}
}
return 0;
}
输入
第一行一个n
然后是n个从小到大排列的数
然后输入一个m表示接下来有m个询问,接下来m行每行一个数,问你这个数在不在刚才给的那些数里面
1<=n<=1000000,1<=m<=1000000,其他数都是int型范围的数
输出
对于每个询问,如果询问的数在所给的数里面,就输出yes,否则输出no
Input
5
1 2 5 6 10
3
2
5
7
Output
yes
yes
no
#include< iostream >
using namespace std;
#define N 1000000
int a[N];
int main()
{
int n,m,i,mid,left,right,flag,x;
while( scanf("%d",&n)!=EOF)
{
for(i =0;i< n; i ++)
scanf("%d",&a[i]);
scanf("%d",&m);
while(m--)
{
scanf("%d",&x);
left=0;
right=n-1;
flag=0;
while(left<=right)
{
mid=left ((right-left)/2);
if(a[mid]==x)
{
flag=1;
printf("yes\n");
break;
}
else if(a[mid]>x)
right=mid-1;
else
left=mid 1;
}
if(flag==0)
printf("no\n");
}
}
return 0;
}