LOADING

加载过慢请开启缓存 浏览器默认开启

Happy Birthday!LevOJ P1747 单调不降序列中与x最接近元素

2023/5/21

思路:

先对整个序列排序一下(虽然好像输入本来就是有序的,不过以防万一),然后用 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;
}