1001.二分查找
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
输出
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
输入样例
5
1 3 4 7 11
3
3
6
9
输出样例
Yes
No
No
#include <stdio.h>
#include <stdlib.h>
int num;
int numlist[10000];
int cnt;
int flag[50000];
void getdata(){
scanf("%d",&num);
int i;
for(i=0;i<num;i++){
scanf("%d",&numlist[i]);
}
scanf("%d",&cnt);
}
int search(int k){
int left,right,mid;
left=0;
right=num-1;
mid=(left+right)/2;
while(1){
if(left>right){
return 0;
}
else{
if(numlist[mid]==k){
return 1;
}
else if(numlist[mid]>k){
right=mid-1;
mid=(left+right)/2;
}
else{
left=mid+1;
mid=(left+right)/2;
}
}
}
}
int main(void){
int i;
getdata();
for(i=0;i<cnt;i++){
int tmp;
scanf("%d",&tmp);
flag[i]=search(tmp);
}
for(i=0;i<cnt;i++){
if(flag[i]==1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}