早教吧 育儿知识 作业答案 考试题库 百科 知识分享

代码问题!在一个升序排列的整数数字序列中查找,并返回相应的查找结果。输入每个测试用例由多行组成,第一行是两个整数n和m,其中,1

题目详情
代码问题!
在一个升序排列的整数数字序列中查找,并返回相应的查找结果。
输入
每个测试用例由多行组成,第一行是两个整数n和m,其中,1<=n,m<=1000000。
自第二行起一共有n+m个整数,其中前面n个整数代表升序排列的有序序列,随后的m个整数是待查询的数。n+m个整数的取值在范围1到10^12(10的12次方)之间。
输出
对于每个待查询的数,如果在有序序列中则输出"yes",否则输出"no",每行输出一个查询结果。
样例输入
5 3
6 23 45 56 586
33 66 6
样例输出
no
no
yes
该怎么写,要优化下下
▼优质解答
答案和解析
//hipi亲自测试通过,供参考。时间优化已经做到。

//输入 0 0 退出

#include<stdio.h> 
#include<algorithm> 
using namespace std; 
long a[100],b[1000001],num; 
int main() 

    int n,m,i,j,left,right,mid,flag; 
       while(scanf("%d %d",&n,&m)!=EOF) 
       { 
           if(!n&&!m) break; 
           for(i=1;i<=n;i++) 
               scanf("%d",&a[i]); 
           for(i=1;i<=m;i++) 
               scanf("%d",&b[i]);  
            for(i=0;i<m;i++) 
           { 
               num=b[i+1]; 
               left=1;right=n; 
               flag=0;mid=0; 
               while(left<=right) 
               { 
                   mid=(right+left)/2; 
                   if(a[mid]>num) right=mid-1; 
                   else if(a[mid]<num) left=mid+1; 
                   else if(a[mid]==num) {flag=1;break;} 
               } 
               if(flag) 
                   printf("yes\n"); 
               else printf("no\n"); 
           } 
       } 
       return 0; 
}
看了代码问题!在一个升序排列的整数...的网友还看了以下: