在一个非降序列中,查找与给定值最接近的元素。
//本题采用折半查找的方法,主要判断折半查找的终止条件
#include<isotream>
#include<algorithm>
using namespace std;
int a[100001],b[100001];// 保证数据足够大
int search(int low,int high,int num){ //num表示要查找的数,low表示比num小的数的位置 ,high则与low相对
if(high-low<=1) //当high与low位置之间没有其他的数时,终止
return a[high]-num>=num-a[low]?a[low]:a[high]; // 返回差值最小的
int mid=(low+high)/2;
if(num>a[mid])
return search(mid,high,num);
else return search(low,mid,num);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //将输入数按从小到大的顺序排列
int m;
cin>>m;
for(int j=0;j<m;j++)
cin>>b[j]; //输入要查找的数
for(int i=0;i<m;i++)
cout<<search(0,n-1,b[i])<<endl;
return 0;
}