二分笔记

二分优点,加快在有序数列中,蓝红区域的扩展,朴素算法缓慢进行.如何扩展,用灰色区域

的中点来判断,然后扩展颜色区域,灰色区域会不断减少,只要logn次就能把灰色区域长度

缩小为0

 

 l在哪里,哪里就是蓝色,r同理,假设没有蓝色区域,赋值0(保留了一个位置)会导致,扩展过程中,红色一直扩展

直到两者相遇,l+1=r,导致错误(不满足条件),所以要指向数组两边

 注意当l+1=r时候会退出循环体,不进行计算

 注意细节,如果m处于最后一个元素边界更新时候越过中点可能会红蓝边界出错

出于正确性易懂性,写成l=m||r=m

 注意分界线要保持唯一性,最后都会回到第一种情况

 

 

 不看图--如何思考--红蓝对立

前提保证数据中一定有5的存在,没有分界线就不好找了(程序不好找)

 做题思路,一开始先暴力枚举,过不了再优化

浮点数二分:for循环用小数会出现问题,递增控制在很小才能算出来,基本枚举不出来

考虑别的算法优化--二分,精度太高的时候,四舍五入下左右没有区别

二分答案模型

 二分答案,最大化答案,最小化答案

 最大化查找写成一个check函数,可行区内,返回真,l右移拓展,记住答案是x

最大化,越大越好,但不能超过条件,最小化,越小越好,但不能小于条件,输出答案为x,条件为y

 y的条件并不一定取等号的时候取到x的最值,满足条件时候即可

 x作为最短跳跃距离,不可能有比他还小的,从头到尾枚举一边把比他小的移开,大的保留

枚举跳跃距离不断二分就可以找到答案,模拟过程,累加计数

谁y谁x想哪个量随着哪个量变化.

差分技巧,把一段区间修改弄成两个点(头和尾,相加为0区间修改,目的是消除对后端的影响

 然后求前缀和

最大值最小问题,x是伤害,y是走得通1,走不通0

 

posted @ 2023-09-10 12:20  仲裁45  阅读(18)  评论(0)    收藏  举报