有關二分查詢的STL

2021-07-11 10:20:39 字數 854 閱讀 5048

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述給定乙個單調遞增的整數序列,問某個整數是否在序列中。

輸入第一行為乙個整數n,表示序列中整數的個數;第二行為n(n不超過10000)個整數;第三行為乙個整數m(m不超過50000),表示查詢的個數;接下來m行每行乙個整數k。

輸出每個查詢的輸出佔一行,如果k在序列中,輸出yes,否則輸出no。

輸入樣例5

1 3 4 7 11 3

3 69

輸出樣例

yes no

noc++中可以用stl來實現二分查詢,函式是binary_search,共有三個引數,前兩個是陣列的起始以及截止長度,最後乙個是目標查詢值。

返回型別為布林型,找到了為true,未找到為false。

標頭檔案為algorithm

**如下:

#include #include #include using namespace std;

int main()

scanf("%d", &k);

for (i = 0; i <= k - 1; i++)

else

}return 0;

}

另外還有upper_bound和lower_bound兩個函式,返回值為整形,是該數字在陣列中的下標。乙個返回的是》key的第乙個元素,第二個返回的是》=key的以第一元素,簡而言之,第乙個返回的是目標值中下標最大的,第二個是最小的。

還要注意,返回的下標是從一開始的。

寫的時候如果是想要返回精確的下標值,應該這樣寫:ans=upper_bound(a,a+n,target)-a-1;最後不要忘了減a。

stl 二分查詢

在stl中對二分查詢進行了封裝,有兩種 upper bound,lower bound。例如 pos lower bound a,a n,value 查詢value值在長度為n的陣列a中的位置 關於返回值,函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於...

STL 二分查詢

實現原始碼 1.在乙個遞增的陣列 或vector 中查詢元素屬於 s e 的下標 2.查詢遞增陣列中元素是否存在 使用binary search 注 對於結構體,要麼過載小於符號 bool operator 要麼定義有小於符號含義的cmp函式。3.應用在遞減序列中 include include i...

語法 STL中的有關二分查詢的演算法

stl加入c 11標準為c 注入了新的活力,其中提出的泛型程式設計為c 程式帶來了翻天覆地的變化,一些泛化的演算法實現讓程式設計變得簡單高效。stl 中有關二分查詢的演算法主要有三個 lower bound upper bound binary search。參照 stl原始碼分析 對三個演算法做個...