計蒜客 1562 二分查詢

2021-10-04 10:04:55 字數 1050 閱讀 7113

蒜頭君手上有個長度為 nn 的陣列 aa。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 aa 中,比 xx 大的最小值是多大?但是這次蒜頭君要求這個數字必須大於 xx,不能等於 xx。

輸入格式

第一行輸入兩個整數 nn 和 mm,分別表示陣列的長度和查詢的次數。

接下來一行有 nn 個整數 a_iai​

。接下來 mm 行,每行有 11 個整數 xx,表示蒜頭君詢問的整數。

輸出格式

對於每次查詢,如果可以找到,輸出這個整數。

否則輸出 -1−1。

資料範圍

1 \le n, m \le 10^5, 0 \le x \le 10^61≤n,m≤10

5,0≤x≤106。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入複製

10 5

1 1 1 2 3 5 5 7 8 901

4910樣例輸出複製12

5-1-1本題兩個地方可以進行優化,1:如果x小於a[0],直接輸出a[0],如果x>=a[n-1],直接輸出-1, 2:用scanf和printf優化cin 和cout

//@author:hairu,wu

//@from:ahut

#include

#include

using

namespace std;

int n,m;

int a[

1000000];

intmain()

sort

(a,a+n)

;for

(int i=

0;i(x>=a[n-1]

)int ans=-1

;int left=

0,right=n-1;

while

(left<=right)

else

}printf

("%d\n"

,ans);}

return0;

}

計蒜客 尋找插入位置 (二分查詢)

給定乙個已經公升序排好序的陣列,以及乙個數 target,如果 target在陣列中,返回它在陣列中的位置。否則,返回 target插入陣列後它應該在的位置。假設陣列中沒有重複的數。以下是簡單的示例 1,3,5,6 5 2 1,3,5,6 2 1 1,3,5,6 7 4 1,3,5,6 0 0 輸入...

D 二分查詢(二) 計蒜客 T1561

題目描述 蒜頭君手上有個長度為 n 的陣列 a。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 a 中,大於等於 x 的最小值是多大?輸入格式 第一行輸入兩個整數 n 和 m,分別表示陣列的長度和查詢的次數。接下來一行有 n 個整數 ai 接下來 m 行,每行有...

計蒜客T1156 查詢最近的元素 二分

題目貼上 在乙個非降序列中,查詢與蒜頭君的給定值最接近的元素。輸入格式 第一行包含乙個整數 n,為非降序列長度。1 n 100000。第二行包含 n 個整數,為非降序列各元素。所有元素的大小均在 0 1,000,000,000 之間。第三行包含乙個整數 m,為要詢問的給定值個數。1 m 10000。...