题解:二分法是基本的查找算法,这道题是经典的二分法求解,一定要掌握!!!
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int n,m,number,l,r,mid;
long long a[100005];
int main(){
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
}
cin>>m;
while(m--){
cin>>number;
l=0,r=n;
if(number<=a[0]) {
cout<<a[0]<<endl;
}else if(number>=a[n-1]){
cout<<a[n-1]<<endl;
}else{
while(l<r){
mid=(l+r)/2;
if(a[mid]<number)
l=mid;
else if(a[mid]>number)
r=mid;
else {
cout<<a[mid]<<endl;
break;
}
if(l==r-1&&a[l]<=number&&a[r]>=number){
if(abs(a[l]-number)<=abs(a[r]-number))
cout<<a[l]<<endl;
else cout<<a[r]<<endl;
break;
}
}
}
}
return 0;
}