這是一題非常典型的二分查詢資料左下界和右上界模板題。
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行,每...