P1747 求解遞增序列中與x最接近元素問題
阿新 • • 發佈:2022-05-29
題目描述
在一個非降序列序列中與給定值 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()返回一個指標.指標指向該區間第一個大於第三個引數的數的位置.