二分 小知識

2021-08-05 22:37:30 字數 1137 閱讀 6626

stl二分查詢

lower_bound():

標頭檔案:  #include

函式模板: 如 binary_search()

函式功能:  函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置

舉例如下:

乙個陣列number序列為:4,10,11,30,69,70,96,100.設要插入數字3,9,111.pos為要插入的位置的下標

則pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number陣列的下標為0的位置。

pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number陣列的下標為1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number陣列的下標為8的位置(但下標上限為7,所以返回最後乙個元素的下乙個元素)。

所以,要記住:函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置,且last的位置是越界的!!~

返回查詢元素的第乙個可安插位置,也就是「元素值》=查詢值」的第乙個元素的位置

upper_bound():

標頭檔案:#include

函式模板: 如binary_search()

函式功能:函式upper_bound()返回的在前閉後開區間查詢的關鍵字的上界,返回大於val的第乙個元素位置

例如:乙個陣列number序列1,2,2,4.upper_bound(2)後,返回的位置是3(下標)也就是4所在的位置,同樣,如果插入元素大於陣列中全部元素,返回的是last。(注意:陣列下標越界)

返回查詢元素的最後乙個可安插位置,也就是「元素值》查詢值」的第乙個元素的位置

注意:lower_bound(val): 返回容器中第乙個值【大於或等於】val的元素的iterator位置。

upper_bound(val): 返回容器中第乙個值【大於】val的元素的iterator位置。

二分小技巧

有一些題目,常常會用到二分,但無良的出題人總是會卡人們的二分。比方說你每次二分總要分滿log次,而且還總要分n次,這樣效率就變成了n log n 很是gg。但是思考發現我們的二分存在乙個小問題,就是說右端點總是被卡死的,如果解決這個瓶頸,便能實現不被卡。而能二分說明它一定有二分性質,也就是說我們可以...

二分入門 二分知識 及 幾種情況

二分排序 時間複雜度是 log n 最壞的情況下是 n 乙個條件是帶查詢陣列是有序的,分兩種 一公升序 而降序 主要思路就是指定兩個指標start end 分別指向陣列元素的兩端,然後比較陣列中間的arrat mid 和待查詢元素,n 直接找到某值在右若干個 n時 找n 以下是 若找到中間值是n則輸...

二分思想小剖析

這乙個月努力沖一沖,三月份的甲級能考掉就考掉了。今天看演算法筆記看到了二分,想著二分還不簡單。看了看發現並不是?演算法筆記中有一句加粗的話是我以前在二分中從沒聽過的,大部分二分問題可以歸結為 尋找有序序列中第乙個滿足某條件的元素的位置。這句話一開始聽得不明所以,仔細一想別有洞天。比如下面的木棒切割問...