二分練習題4 查詢最接近的元素 題解

2022-08-19 22:15:10 字數 982 閱讀 5791

題目出處:《資訊學奧賽一本通》第七章練習7

題目描述

在乙個非降序列中,查詢與給定值最接近的元素。

輸入格式

第一行包含乙個整數 \(n\) ,為非降序列長度。 \(1 \le n \le 100000\) 。

第二行包含 \(n\) 個元素,為非降序列各元素。所有元素的大小均在 \(1\) ~ \(10^9\) 之間。

第三行包含乙個整數 \(m\) ,為要詢問的次數。 \(1 \le m \le 10000\) 。

接下來 \(m\) 行,每行乙個整數,為要詢問最接近元素的給定值。所有給定值的大小均在 \(0\) ~ \(10^9\) 之間。

輸出格式

\(m\) 行,每行乙個整數,為最接近相應給定值的元素值,保持輸入順序。若有多個值滿足條件,輸出最小的乙個。

樣例輸入

3

2 5 8210

5

樣例輸出
8

5

題目分析

這道題目和「查詢大於等於x的最小元素」是一樣的到了。

我們假設我們用「查詢大於等於x的最小元素」的方法求得了答案對應的座標為 \(res\) ,則會有三種情況:

所以我們只需要在「查詢大於等於x的最小元素」的**之上稍加修改就能完成這道題目。

實現**如下:

#include using namespace std;

const int maxn = 100010;

int n, a[maxn], q, x;

// solve函式用於返回大於等於x的最小元素的座標

int solve(int x)

else l = mid + 1;

}return res;

}int main()

else if (res == 1)

else

}return 0;

}

二分 查詢最接近的元素

題目鏈結 在乙個非降序列中,查詢與給定值最接近的元素。第一行包含乙個整數n,為非降序列長度。1 n 100000。第二行包含n個整數,為非降序列各元素。所有元素的大小均在0 1,000,000,000之間。第三行包含乙個整數m,為要詢問的給定值個數。1 m 10000。接下來m行,每行乙個整數,為要...

NYOJ練習題 刪除元素(二分查詢)

時間限制 1000 ms 記憶體限制 65535 kb 描述 題意很簡單,給乙個長度為n的序列,問至少刪除序列中多少個數,使得刪除後的序列中的最大值 2 最小值 輸入 多組測試資料,每組測試資料報含兩行。第一行乙個整數n n 10 5 序列中元素的個數。第二行依次輸入n個數a1,a2 an,1 ai...

二分練習題1 查詢元素 題解

題目描述 現在告訴你乙個長度為 n 的有序陣列 a 1,a 2,a n 以及 q 次詢問,每次詢問會給你乙個數 x 對於每次詢問,你需要確定在陣列中是否存在某乙個元素 a i x 輸入格式 輸入的第一行包含乙個整數 n 1 le n le 100000 用於表示陣列中元素的個數。輸入的第二行包含 n...