标签:
在一个非降序列中,查找与给定值最接近的元素。
3 2 5 8 2 10 5
8 5
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define maxn 100010 4 int a[maxn]; 5 int n; 6 int cmp(const void *a,const void *b) 7 { 8 return *(int *)a-*(int *)b; 9 } 10 void search(int x) 11 { 12 int mid,l,r,ans=-1; 13 mid=n/2; 14 l=0; 15 r=n; 16 while(l<r-1) 17 { 18 if(a[mid]>x) r=mid; 19 else l=mid; 20 mid=(r+l)/2; 21 } 22 if(l+1==n||x-a[l]<=a[l+1]-x) ans=a[l]; 23 else ans=a[l+1]; 24 printf("%d\n",ans); 25 } 26 int main() 27 { 28 int m,f; 29 int i; 30 scanf("%d",&n); 31 for(i=0;i<n;i++) 32 scanf("%d",&a[i]); 33 qsort(a,n,sizeof(int),cmp); 34 scanf("%d",&m); 35 while(m--) 36 { 37 scanf("%d",&f); 38 search(f); 39 } 40 return 0; 41 }
作为一道最基础的二分题,好像也没什么好讲的,也就是while(m--)的小技巧罢了。
Openjudge NOI题库 ch0111/01 查找最近的元素
标签:
原文地址:http://www.cnblogs.com/KakagouLT/p/5022397.html