笔记二分答案

Posted dprswdr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记二分答案相关的知识,希望对你有一定的参考价值。

二分答案 O(nlogm)

对一段有序的序列 每次二分,从而快速的查找。解决的问题常是“使最大值最小”或“使最小值最大”。

注意:①注意二分的序列是有序的,对于无序的序列进行二分需要先排序。

   ②二分的区间尽可能大(给定区间左右端点+-1)

   ③根据题目要求,设定好check函数。

   ④防止死循环。↓

模板:

 1 //第一种
 2 while(r-1>l)
 3 {
 4     int mid=(l+r)>>1;
 5     if(check(mid)) l=mid;
 6     else r=mid;
 7 } 
 8 printf("%d",l);
 9 //第二种
10 //
11 while(l<r)
12 {
13     int mid=(l+r)>>1;
14     if(check(mid)) l=mid+1;
15     else r=mid;
16 } 
17 printf("%d",l-1);
18 //
19 while(l<r)
20 {
21     int mid=(l+r)>>1;
22     if(check(mid)) l=mid;
23     else r=mid-1;
24 } 
25 printf("%d",r);

例题:

【NOIP2015】【luogu2678】跳石头 →简单的二分,注意特判

【codevs2072】分配房间 →简单的二分,和跳石头很像,注意check函数的设定

【NOIP2016】【luogu1083】借教室 →较难,二分+差分

 

以上是关于笔记二分答案的主要内容,如果未能解决你的问题,请参考以下文章

Day2二分图笔记

学习笔记:python3,代码片段(2017)

代码源 Div1 - 101#61. 二分答案(贪心)

「算法笔记」一文摸秃二分查找

数据结构与算法笔记—— 查找算法(顺序查找二分法查找)

二分查找+二分答案(Java)