總時間限制:
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
85
最基本的二分,找點感覺。
但是有小坑。。
二分邊界問題,我這種二分的寫法,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,為要詢問的給定值個數...