二分答案題目

2021-10-24 19:19:41 字數 2073 閱讀 8826

整數二分:

bool

check

(int x)

//檢查x是否滿足某種性質

//區間[l,r]被劃分為[l,mid]和[mid+1,r]時使用

intbsearch_1

(int l,

int r)

return l;

}//區間[l,r]被劃分為[,mid-1]和[mid,r]時使用

intbsearch_2

(int l,

int r)

return l;

}

浮點數二分

bool

check

(double x)

double

bsearch_3

(double l,

double r)

return l;

}

整數二分例題

/*給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。

如果陣列中不存在該元素,則返回「-1 -1」。*/

#include

#include

using

namespace std;

int a[

100005];

intmain()

while

(q--)if

(a[l]

!=k)

printf

("-1 -1\n");

else

printf

("%d\n"

,r);}}

return0;

}

浮點數二分例題

/*

給定乙個浮點數n,求它的三次方根。

輸入格式

共一行,包含乙個浮點數n。

輸出格式

共一行,包含乙個浮點數,表示問題的解。

注意,結果保留6位小數。

資料範圍

−10000≤n≤10000

*/#include

using

namespace std;

intmain()

printf

("%.6f"

,l);

return0;

}

對於每組輸入資料:

第一排 分別是 河的寬度、石頭的個數n、最多的跳躍次數.

以下n排是n個石頭的座標,

然後要求在最多跳躍次數以內,每次落地只能在石頭上,跳到河的對岸.輸出青蛙至少有每次跳多遠的能力?

#include

#include

using

namespace std;

const

int n=

5e5+10;

int a[n]

;int l,n,m;

bool

check

(int x)

//檢查x是否滿足某種性質 ,x為跳遠能力,要檢查當前的能力是否能夠過河

//次數用完了,可以走到頭,也就是到了最後重點的那個認為的石頭,就是答案

if(now==l)

//走到頭

return

true

;else

return

false;}

//區間[l,r]被劃分為[l,mid]和[mid+1,r]時使用

intbsearch_1

(int l,

int r)

return l;

}int

main()

sort

(a,a+n)

; a[n]

=l;int max=a[0]

;for

(int i=

0;i) cout<<

bsearch_1

(max,l)

<}return0;

}

二分查詢與二分答案

主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...

二分查詢和二分答案

1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...

二分與二分答案學習

判斷left,mid,right的符號進行區間的精確。如下為遞迴二分求零點的操作 double find zero point double left,double right,double precesion double mid right left 2 if f mid 0 if f mid ...