AcWing 789 數的範圍

2022-06-05 13:30:12 字數 1079 閱讀 2393

給定乙個按照公升序排列的長度為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的數的indexright時找最後乙個小於等於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時,lr就是答案的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行,每行包含乙個...