其他分享
首页 > 其他分享> > P1747 求解递增序列中与x最接近元素问题

P1747 求解递增序列中与x最接近元素问题

作者:互联网

题目描述

在一个非降序列序列中与给定值 x 最接近的元素

输入描述

第一行包含一个整数 n,为非降序列长度 (1<=n<=100 000)

第 2 行包含 n 个整数,为非降序列的各个元素, 所有元素的大小均在 0~1 000 000 000 范围内。

第 3 行包含一个整数 m, 为要询问的给定值的个数 (1<=m<=10 000)。接下来 m 行,每行一个整数, 为要询问最接近元素的给定值,所有给定值的大小均在 0~1 000 000 000 范围内。

输出描述

输出共 m 行,每行一个整数,为最接近相应给定值的元素值,并保持输入顺序。若有多个元素值满足条件,输出最小的一个。

输入样例

Copy to Clipboard
3
2 5 8
2
10
5

输出样例

Copy to Clipboard
8
5
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000001],m,n;
int main()
{
    while(cin>>n){
        for(int i=1;i<=n;i++)
        cin>>a[i];
        int t;
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>t;
            int *p=upper_bound(a+1,a+n+1,t);
            if(abs(t-*p)<abs(t-*(p-1)))
            cout<<*p<<endl;
            else
            cout<<*(p-1)<<endl;
            //cout<<"*p"<<*p<<endl;
        }
    }
    return 0;
}

主要是upper_bound()函数的使用.upper_bound()头文件#include<algorithm>

upper_bound()返回一个指针.指针指向该区间第一个大于第三个参数的数的位置.

 

标签:upper,求解,int,P1747,元素,bound,序列,include,递增
来源: https://www.cnblogs.com/ACM-YYDS/p/16323897.html