lower_bound(起始位址,結束位址,要查詢的數值) 返回的是數值第乙個出現的位置。
upper_bound(起始位址,結束位址,要查詢的數值) 返回的是第乙個大於待查詢數值 出現的位置。
binary_search(起始位址,結束位址,要查詢的數值) 返回的是是否存在這麼乙個數,是乙個bool值。
功能:函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置.
注意:如果所有元素都小於val,則返回last的位置,且last的位置是越界的!!
功能:函式upper_bound()返回的在前閉後開區間查詢的關鍵字的上界,返回大於val的第乙個元素位置
注意:返回查詢元素的最後乙個可安插位置,也就是「元素值》查詢值」的第乙個元素的位置。同樣,如果val大於陣列中全部元素,返回的是last。(注意:陣列下標越界)
使用:
int n;
int a[n]
;sort
(a, a + n)
;int l =
lower_bound
(a ,a + n, b)
- a;
//在a陣列中查詢數值為b的下標
//注意要減去陣列首位址
有關二分查詢的STL
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50000 表示查詢的個數 接下來m行每行乙個整數k。輸出每個...
二分查詢的函式
二分查詢,乙個常用的查詢的演算法,只要涉及二分法,你要用正常的演算法會很大可能會報錯 時間超時,因為測試資料很誇張,有多誇張呢,差不多0 n 10,00,000,000 只要寫二分你就能得到ac啦 二分查詢就是巧妙的判斷,3個數掌控著陣列.資料需要是排好序的.以下是二分查詢函式 小到大排序 int ...
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...