题解!!!
2026-10-04 23:15:43
发布于:江苏
5阅读
0回复
0点赞
直接套模板加特判
#include <bits/stdc++.h>
using namespace std;
int n,m;
long long a[100005];
int f(int x){//寻找数组中第一个大于等于x的元素(有模板或者直接库函数)
int l=1,r=n;
int ans;
while(l<=r){
int mid=(r+l)>>1;
if(a[mid]<=x){
l=mid+1;
ans=mid;
}
else r=mid-1;
}
return ans;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++){
long long b;
cin>>b;
if(b<a[1]){//如果输入的小于第一个元素(最小的)就直接输出第一个
cout<<a[1]<<endl;
continue;
}
int pos=f(b);
//暴力特判
if(a[pos]==b)cout<<b<<endl;//如果该数在数组中就直接输出这个数
else {
if(pos==n)cout<<a[pos]<<endl;//如果第一个大于等于的数是最后一个就直接输出最后一个
else{//判断大小 该数不在数组中
if(b-a[pos]>a[pos+1]-b)cout<<a[pos+1]<<endl;
else if(b-a[pos]<a[pos+1]-b)cout<<a[pos]<<endl;
else cout<<a[pos]<<endl;
}
}
}
return 0;
}
这里空空如也



有帮助,赞一个