給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。
對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。
如果陣列中不存在該元素,則返回「-1 -1」。
第一行包含整數n和q,表示陣列長度和詢問個數。
第二行包含n個整數(均在1~10000範圍內),表示完整陣列。
接下來q行,每行包含乙個整數k,表示乙個詢問元素。
共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。
如果陣列中不存在該元素,則返回「-1 -1」。
1≤n≤100000
1≤q≤10000
1≤k≤10000
6 3
1 2 2 3 3 434
5
3 4
5 5-1 -1
這個題目就是乙個典型的二分法,但是不是找其中的值,而是找到這個元素的邊界。因為時公升序陣列,故我們找left
時找第乙個大於等於x
的數的index
,right
時找最後乙個小於等於x
的數的index
上述都是從左向右看
#include using namespace std;
const int inf = 100010;
int q[inf];
int main()
if(q[l] != x)
else
cout << l << endl;}}
return 0;
}
其實二分法就是尋找邊界,並且保證每一次邊界都會落在我麼們選擇的區間內部,當l == r
時,l
或r
就是答案的index
二分一定有答案,但是因為可能找的值不存在,就會根據check()來返回乙個值的下標(依據如思路中所述)
AcWing 789 數的範圍
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...
AcWing 789 數的範圍
題目描述 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下...
Acwing 789 數的範圍
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每行包含乙個...