2,浮點數二分法模板
bool
check
(int x)
// 檢查x是否滿足某種性質
// 區間[l, r]被劃分成[l, mid]和[mid + 1, r]時使用:
//適合情況:滿足該性質的範圍在右邊
intbsearch_1
(int l,
int r)
return l;
}// 區間[l, r]被劃分成[l, mid - 1]和[mid, r]時使用:
//適合情況:滿足該性質的範圍在左邊
277/
注:有單調性的序列一定可以二分,但是二分不一定要求單調性,二分的本質不是單調性。
二分的本質是,如果可以找到乙個性質,使得全部範圍的一部分滿足這個性質,另一部分不滿足,那麼二分法就可以用來尋找這個性質的邊界~
二分法一定可以找到解,無解的情況都與題目限制有關。
題目:
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。
如果陣列中不存在該元素,則返回「-1 -1」。
輸入格式
第一行包含整數n和q,表示陣列長度和詢問個數。
第二行包含n個整數(均在1~10000範圍內),表示完整陣列。
接下來q行,每行包含乙個整數k,表示乙個詢問元素。
輸出格式
共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。
如果陣列中不存在該元素,則返回「-1 -1」。
資料範圍
1≤n≤100000
1≤q≤10000
1≤k≤10000
輸入樣例:
6 31 2 2 3 3 434
5輸出樣例:
3 45 5
-1 -1
分析:
利用上面的模板,求出查詢數的左右兩個邊界
**:
#include
#include
#include
using
namespace std;
const
int n =
100010
;int n, q;
int p[n]
;int
main()
if(p[l]
!= k) cout <<
"-1 -1"
<< endl;
else
cout << l << endl;}}
return0;
}
bool
check
(double x)
// 檢查x是否滿足某種性質
double
bsearch_3
(double l,
double r)
return l;
}
浮點數二分比整數二分簡單一些,沒什麼邊界值,套模板做就 ok
題目:
給定乙個浮點數n,求它的三次方根。
輸入格式
共一行,包含乙個浮點數n。
輸出格式
共一行,包含乙個浮點數,表示問題的解。注意,結果保留6位小數。
資料範圍
−10000≤n≤10000
輸入樣例:
1000.00
輸出樣例:
10.000000
**如下:
#include
using
namespace std;
intmain()
printf
("%lf"
,l);
return0;
}
二分法及相關擴充套件
二分法是演算法中的基礎,今天用python語言來總結一下,有錯誤的地方希望能被指出。二分法查詢某數是否存在 def b sit arr,num arr為陣列,num為目標數 if len arr 0 return false l 0 r len arr 1 m 0 while l r m l r l...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...