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
");
19         else
20         printf("NO
");
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 }

二分查找

原文地址:https://www.cnblogs.com/nylg-haozi/p/3182624.html