top1编程
← 返回题目
题解

查找最接近的元素

1 条题解

  • 0
    @ 2026-7-28 22:45:03
    #include <bits/stdc++.h>
    using namespace std;
    int n,q,d;
    int a[1000005];
    int ef(int d){
    	int mid,l=2,r=n;
    	while(l<=r){
    		mid=l+(r-l)/2;
    		if(a[mid]>d){//大了
    			r=mid-1;//缩小范围
    		} 
    		else if(a[mid]<=d){//小等扩大范围
    			 l=mid+1;
    		}
    	}
    	if(abs(a[l]-d)>=abs(a[l-1]-d)){//找差值小的
    		return a[l-1];
    	}
    	else{
    		return a[l];
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	cin>>q;
    	for(int i=1;i<=q;i++){
    		cin>>d;
    		cout<<ef(d)<<endl;
    	}
    	return 0;
    }
    
    • 1