#include<stdio.h>
int main()
{
int n,a[100000],b[100000],i,k,high,low,mid;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
if(i<n-1)
scanf("%d ",&a[i]);
else if(i==n-1)
scanf("%d\n",&a[i]);
}
scanf("%d\n",&k);
for(i=0;i<k;i++)
{
scanf("%d\n",&b[i]);//输入到此为止
if(b[i]<=a[0])
{
printf("%d\n",a[0]);//如果所要查找的数不在序列之内
}
else if(b[i]>=a[n-1])
{
printf("%d\n",a[n-1]);
}
else//在序列之内,采用二分法查找
{
high=n;
low=0;
while(low<high)
{
mid=(low+high)/2;
if(b[i]>a[mid])
low=mid+1;//为什么最小的要加1
else
high=mid;
}
int ans=high;//找到最近的那个数
if(a[ans]-b[i]<b[i]-a[ans-1])
printf("%d\n",a[ans]);
else//包括了等于和小于,等于的时候也是输出排序小的那个
printf("%d\n",a[ans-1]);
}
}
return 0;
}
主要是low+1那块和输出那块.