描述
在一个非降序列中,查找与给定值最接近的元素。
输入
第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
输出
m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。
样例输入
3
2 5 8
2
10
5
样例输出
8
5
#include <iostream>
#include <cmath>
using namespace std;
int nn;
int a[100001];
int pd(int x){
int L,R,M;
if(a[nn-1]<x){
return a[nn-1];
} else if (a[0]>x){
return a[0];
} else{
L=0,R=nn-1;
while (L+1<R){
M=(L+R)/2;
if (a[M]<x){
L=M;
} else{
R=M;
}
}
if (abs(a[L]-x)<=abs(a[R]-x)){
return a[L];
} else return a[R];
}
}
int main(){
int n,i=0;
cin>>n;
nn=n;
while (n--){
cin>>a[i++];
}
int m,x;
cin>>m;
while(m--){
cin>>x;
cout<<pd(x)<<endl;
}
}