码迷,mamicode.com
首页 > 其他好文 > 详细

【笔记】二分答案

时间:2017-12-02 14:08:44      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:死循环   排序   模板   例题   快速   最小   简单的   div   nlog   

二分答案 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】借教室 →较难,二分+差分

 

【笔记】二分答案

标签:死循环   排序   模板   例题   快速   最小   简单的   div   nlog   

原文地址:http://www.cnblogs.com/Loi-Brilliant/p/7953449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!