思路:
先对整个序列排序一下(虽然好像输入本来就是有序的,不过以防万一),然后用 lower_bound() 函数返回第一个不小于搜索元素的地址,再减去首地址就是该元素下标。注意和前一个元素比较谁更接近所求元素(一定要加绝对值),输出即可。
AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,m;
int a[N];
int q,l;
signed main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
cin>>m;
while(m--){
cin>>q;
l=lower_bound(a,a+n,q)-a;
if(a[l]==q){
cout<<a[l]<<endl;
}else{
if(abs(a[l-1]-q)>abs(a[l]-q)){
cout<<a[l]<<endl;
}else{
cout<<a[l-1]<<endl;
}
}
}
return 0;
}