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