NOI 01 查詢最接近的元素 基本二分

2022-01-19 21:04:01 字數 1155 閱讀 3412

總時間限制: 

1000ms

記憶體限制: 

65536kb

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

輸入第一行包含乙個整數n,為非降序列長度。1 <= n <= 100000。

第二行包含n個整數,為非降序列各元素。所有元素的大小均在0-1,000,000,000之間。

第三行包含乙個整數m,為要詢問的給定值個數。1 <= m <= 10000。

接下來m行,每行乙個整數,為要詢問最接近元素的給定值。所有給定值的大小均在0-1,000,000,000之間。

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

樣例輸入

3

2 5 8210

5

樣例輸出

8

5

最基本的二分,找點感覺。

但是有小坑。。

二分邊界問題,我這種二分的寫法,while到最後找到的是兩個最接近的值,二選一。

但是當n=1的時候,最後的兩個值其實是同乙個,a[l+1]是不存在的。。。

特判n=1直接輸出即可。

還是就是陣列長度不要和尋值個數看錯。。陣列是開到10w的,不然oj返回的結果是tle。。。

#include #include 

#include

const

int maxn = 100000+10

;int

a[maxn],n;

using

namespace

std;

int search(int

x)

else

mid = (l+r)/2

; }

if(abs(a[l]-x)<=abs(a[l+1]-x)&&lans =a[l];

else

//if(x-a[l]>a[l+1]-x&&l//

l++;

return

ans;

}intmain()

intt;

scanf("%d

",&t);

while(t--)

else

}return0;

}

01 查詢最接近的元素

總時間限制 1000ms 記憶體限制 65536kb 描述在乙個非降序列中,查詢與給定值最接近的元素。輸入第一行包含乙個整數n,為非降序列長度。1 n 100000。第二行包含n個整數,為非降序列各元素。所有元素的大小均在0 1,000,000,000之間。第三行包含乙個整數m,為要詢問的給定值個數...

NOI 1 11查詢最接近的元素

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

查詢最接近的元素

總時間限制 1000ms 記憶體限制 65536kb 描述在乙個非降序列中,查詢與給定值最接近的元素。輸入第一行包含乙個整數n,為非降序列長度。1 n 100000。第二行包含n個整數,為非降序列各元素。所有元素的大小均在0 1,000,000,000之間。第三行包含乙個整數m,為要詢問的給定值個數...