1073: 查找

来源:互联网 发布:linux修改主机名不重启 编辑:程序博客网 时间:2024/05/17 01:33
1073: 查找时间限制: 1 Sec  内存限制: 128 MB提交: 708  解决: 253[提交][状态][讨论版]题目描述       给定一个集合,查找元素是否在集合中出现。输入每个测试用例由多行组成,第一行是两个整数n和m,两个数范围在1到100000之间。自第二行起一共有n+m个整数,其中前面n个整数代表集合的元素,随后的m个整数是待查询的数。所有的整数在范围[-2^31,2^31)内。输出对于每个待查询的数,如果在集合中则输出yes,否则输出no.样例输入5 37 9 3 2 -54 9 -55 3-2 1 0 -2 10 -2 3样例输出noyesyesyesyesno提示注意,需要快速的查找算法!效率不高的查找算法可能会超时!来源CYH来源: http://125.221.232.253/JudgeOnline/problem.php?id=1073
#include <cstdio>#include <stdlib.h>#define max 100000int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;}int A[max+1];int Search(int key,int n){    int lef=0,rig=n,mid;    while(lef<=rig)    {        mid=(lef+rig)/2;        if(A[mid]==key) return 1;        else if(A[mid]>key) rig=mid-1;        else  lef=mid+1;    }    return 0;}int main(){    int m,n;    while(~scanf("%d %d",&n,&m))    {        for(int i=0;i<n;i++) scanf("%d",&A[i]);        qsort(A,n,sizeof(A[0]),cmp);        for(int i=1,P;i<=m&&scanf("%d",&P);i++)            printf("%s\n",Search(P,n)?"yes":"no");    }    return 0;}
0 0
原创粉丝点击