在一个非降序列中,查找与给定值最接近的元素。
#include <iostream>
#include <cstdio>
using namespace std;
int a[114514],n,x,l,h,m,s;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
scanf("%d",&x);
while(x--)
{
scanf("%d",&s);
if(s<=a[0])
{
_____(1)_______;
continue;
}
if(s>=a[n-1])
{
printf("%d\n",a[n-1]);
continue;
}
h=n-1;
l=0;
while(l<=h)
{
m=(h+l)/2;
if(s==a[m])
______(2)_____;
else if(s>a[m])
l=m+1;
else if(s<a[m])
______(3)_____;
}
if(______(4)______)
printf("%d\n",s);
else if(a[l]-s<s-a[h])
printf("%d\n",a[l]);
else
printf("%d\n",a[h]);
}
}