1. 程式人生 > 其它 >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()返回一個指標.指標指向該區間第一個大於第三個引數的數的位置.