題目出處:《資訊學奧賽一本通》第七章練習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...