搜索(二)
时间限制(普通/Java):3500MS/10500MS 运行内存限制:65536KByte
总提交:796 测试通过:393
总提交:796 测试通过:393
描述
给定有序整数序列(递增),判断指定整数是否存在。
输入
第一行是一个正整数:测试用例数目,最多为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<stdio.h>
int n, m;
int a[10000];
int fun(int low, int high)
{
while(low <= high)
{
int mid = (low+high) / 2;
if(a[mid] < m) low = mid+1; // +1
else if(a[mid] > m) high = mid-1; // +1
else return 1;
}
return 0;
}
int main()
{
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
if(fun(0, n-1)) printf("Yes\n");
else printf("No\n");
}
return 0;
}