【笔记】二分答案

本文深入探讨了二分法的高效应用,特别是在有序序列中查找特定元素的场景。介绍了二分法的基本原理,提供了两种不同的实现模板,并通过具体实例如跳石头、分配房间和借教室等问题,展示了如何设定check函数及避免死循环。适合初学者理解和实践。
摘要由CSDN通过智能技术生成

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

 

转载于:https://www.cnblogs.com/Loi-Brilliant/p/7953449.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值