注意點:
1.有單調性一定可以二分,二分不一定需要單調性
2.二分本質: 找到一種性質,將乙個區間一分為二,一部分滿足性質,另一部分不滿足性質,通過二分找到兩部分的邊界
3.二分一定有解,即能夠找到性質的邊界。無解通常跟題目有關。
4.浮點數二分: 精度足夠小時結束迴圈 或者 直接迴圈100次
while( r-l > 1e-6 ) // r-l足夠小時即認為找到了答案
保留x位小數 , 精度多2 即1e-(x+2)
一、整數二分模板
一、整數二分
求左部分的右邊界
true : [mid, r]
false : [l, mid-1]
mid = l + r + 1 >> 1
求右部分的左邊界
true : [l, mid]
false: [mid+1, r]
mid = l + r >> 1
整數二分例項
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。
對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。
如果陣列中不存在該元素,則返回「-1 -1」。
#include
#include
using
namespace std ;
const
int n =
1e5+10;
int q[n]
;int
main()
if( q[l]
!= x )
else cout << l <<
' ';
// 找右邊界
l =0, r = n-1;
while
( l < r )
cout << l << endl ;
}return0;
}
二、浮點數二分模板
例子: 求x的開根號值
int
main()
// // 2. 直接迴圈判斷
// for( int i = 0; i < 100; i++ )
printf
("%.6lf"
, l)
;// 保留 x 位小數時,精度通常為 1e-(x+2)
return0;
}
二分 整數二分和浮點數二分
一定是單調的才可以二分。找中間點 判斷是否滿足check函式 此函式需要自己根據題意調整,假設紅色區域為滿足check函式,說明mid在紅色區域內,此時要在mid到r之間找,l mid,否則r mid 1。由於此時l mid 所以中間點應為 l r 1 2 中間點mid l r 2 mid l r ...
浮點數二分
2 浮點數二分 模板 浮點數二分演算法模板 模板題 acwing 790.數的三次方根 bool check double x double bsearch3 double l,double r return l acwing790.數的三次方根 給定乙個浮點數n,求它的三次方根。輸入格式 共一行,...
整數二分和浮點數二分基本思路和模板
出自南昌理工學院acm集訓隊 二分,是從一系列有序對中找出某乙個符合條件的數,找到之後把這個數的位置給返回,基本思想就是,我給你乙個資料範圍,打個比方1 200,我讓你猜我心中所想的那個數175,最基本的方法就是從頭到尾開始猜,是1嗎,不是,是2嗎,不是。一直猜到答案為止,這樣猜的話,最壞的情況是要...