二分手寫模板 4 0經驗總結

2021-10-07 17:49:57 字數 900 閱讀 2591

已經是第三次卡邊界了..日

你要求的是滿足條件的最小值, 所以當check滿足時,應該往左搜。比如求最大值的最小化,往左搜,用第乙個板子——p1462 通往奧格瑞瑪的道路

如果要求滿足條件的最大值,所以當check滿足時,應該往右搜,比如求最小值的最大化,往右搜 —— 通訊線路

然後邊界[left,right], l=left-1,r=right+1;在求解實際問題時,用l==right+1(二分的實際含義)來判斷無解的情況而不是用什麼dis[n]==0x3f3f3f3f(達不到這個點來判斷)[兩道題合計8小時的教訓];

2020/7/3上面的說法不對,在使用1號板子(r=mid),這個邊界開[1,n+1];在使用二號板子,這個邊界開[0,n]

然後去寫check函式,用bool返回值比較容易想清楚—— 裡面邏輯就是判斷mid這個值能不能滿足條件.如果滿足就true,不滿足就false;

如在p1462中,用的是第乙個板子,然後check的時候,如果當前的mid滿足就true;那麼當前的mid怎麼算滿足呢,只要能走到就滿足,所以是dis[n]<=b就是滿足的

#include#include#include#includeusing namespace std;

typedef long long ll;

//找12222233的左邊的2 ,取邊界時l=left;r=right+1;

int bsearch1(int l,int r)

return l;

}//找右邊2,取邊界是l=left-1;r=right;

int bsearch2(int l,int r)

return l;

} int main(void)

自己寫的二分查詢模板 2

關於二分查詢的型別以及變式不同寫法的關鍵 while迴圈條件是l r還是 l r 中值m靠左還是靠右 區間是左開右閉還是左右都閉 先貼上c 標準庫的寫法.public int lower bound int nums,int target,int l,int r return l 或者return ...

二分的模板(花式二分)

對於不下降序列a,n為序列a元素的個數,key為關鍵字 1.求最小的i,使得a i key,若不存在,則返回 1 int binary search 1 inta,intn int key if a r key returnr return 1 2.求最大的i,使得a i key,若不存在,則返回 ...

二分答案模板

include include 必須包含的標頭檔案 using namespace std int main int tmp upper bound point,point 5,7 point 按從小到大,7最多能插入陣列point的哪個位置 printf d n tmp tmp lower bou...