nyoj-86-找球号(一)

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 int a[1000001],t;
 6 int main()
 7 {
 8     int find(int left,int right,int k);
 9     int n,m,i;
10     scanf("%d%d",&n,&m);
11     for(i=0;i<n;i++)
12     scanf("%d",&a[i]);
13     sort(a,a+n);
14     for(i=0;i<m;i++)
15     {
16         scanf("%d",&t);
17         if(find(0,n-1,t))
18         printf("YES\n");
19         else
20         printf("NO\n");
21     }
22     return 0;
23 }
24 int find(int left,int right,int k)
25 {
26     while(left<=right)
27     {
28         int t=left+right;
29         if(a[left]>k&&a[right]<k)
30         break;
31         if(a[t/2]==k)
32             return 1;
33         else if(a[t/2]>k)
34             right=t/2-1;
35         else
36             left=t/2+1;
37     }
38     return 0;
39 }

二分查找

posted @ 2013-07-10 18:17  nylg-haozi  阅读(153)  评论(0编辑  收藏  举报