二分查詢模板題(數的範圍)題解

2021-10-03 06:35:34 字數 1069 閱讀 3857

這是一題非常典型的二分查詢資料左下界和右上界模板題。

acwing的**,

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。

如果陣列中不存在該元素,則返回「-1 -1」。

第一行包含整數n和q,表示陣列長度和詢問個數。

第二行包含n個整數(均在1~10000範圍內),表示完整陣列。

接下來q行,每行包含乙個整數k,表示乙個詢問元素。

共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。

如果陣列中不存在該元素,則返回「-1 -1」。

6 3

1 2 2 3 3 434

5

3 4

5 5-1 -1

1 ≤ n ≤ 100000

1 ≤ q ≤10000

1 ≤ k ≤ 10000

本題是乙個標準的二分查詢模板題,查詢某個數的左邊界和右邊界。

使用 stl 的 lower_bound() 和 upper_bound() 函式的時候,有以下幾個地方需要特別注意:

1、函式的返回值是乙個左閉右開的區間。

2、使用 lower_bound() 查詢左下界的時候,要注意處理沒有找到的情況。比如有這樣的數列 [3 5 5 8 7 7 9 10 11],我們要查詢 4,得到的位置將是數列中 3 所在位置。

3、使用 upper_bound() 查詢右上界的時候,要注意返回值是左閉右開區間,意味著比實際值大一。

該函式介紹請參考

該函式介紹請參考

#include #include #include #include using namespace std;

const int maxn = 1e5+6;

int a[maxn];

int main() ;

int main() else

}printf("%d\n", left);

}return 0;

}

數的範圍 二分

題目描述 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 1000010000範圍內 表示完整...

數的範圍 二分

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...

數的範圍 整數二分

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...