南邮 OJ 1109 搜索(二)

搜索(二)

时间限制(普通/Java) :  3500 MS/ 10500 MS          运行内存限制 : 65536 KByte
总提交 : 874            测试通过 : 445 

比赛描述

给定有序整数序列(递增),判断指定整数是否存在。

输入

第一行是一个正整数:测试用例数目,最多为100。之后,每个测试用例包括三行:

l       第1行整数序列大小n,1≤n≤10000

l       第2行给出有序整数序列(递增),每个整数绝对值不超100000

l       第3行给出指定整数m,1≤m≤10050

输出

对于每个测试用例:

l       指定整数存在则输出“Yes”,否则输出“No”

注意:输出部分的结尾要求包含一个多余的空行。

样例输入

2
2
2 3
4
3
2 3 4
3

样例输出

No
Yes

题目来源

算法与数据结构设计2009



#include<iostream>
using namespace std;

long a[10000];
int main(){
	int N,n,i,j,k;
	long m;
	cin>>N;
	while(N--){
		cin>>n;
		i = 0;
		for(i=0;i<n;++i){
			cin>>m;
			a[i] = (int)m;
		}
		cin>>m;
		for(i=0,j=n-1;j-i>1;){
			if(a[i]==m || a[j]==m)
				break;
			k = (i+j)>>1;
			if(a[k]>m){
				j = k;
			}else{
				i = k;
			}
		}
		if(a[i]==m || a[j]==m){
			cout<<"Yes"<<endl;
		}else{
			cout<<"No"<<endl;
		}
	}
}






你可能感兴趣的:(ACM,南邮OJ,搜索二)