二分答案

1 功能:

  • 用于解决最大的最小值和 最小的最大值。(基本题型)
  • 直接可以减少一个元素的处理,减少思维复杂度,而且只增加了少量的时间复杂度。
  • 当遇到某一个元素特别难处理时,看能不能用二分把他剥离出来。
  • 比如求第几大问题

2 适用条件:

  1 查找的 答案 一个连续区间内的。

  2 这个答案要是单调的。

4 注意:

  • 看l能不能等于0;他的最大和最小值的范围是哪些

3 工具:lower_boundupper_bound

  •  int b=lower_bound(p+1,p+1+n,x)-p; (二分)第一个大于等于的。
  •  upper_bound 同理,第一个大于的。

 

 int l=1,r=n,ans=-1;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(ck(mid))
        {
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }// qu xiao 
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(ck(mid))
        {
            ans=mid;
            l=mid+1;
        }
        else r=mid-1;
    }
View Code

 

 

 

 

 

 

posted @ 2021-10-14 16:17  VxiaohuanV  阅读(46)  评论(0编辑  收藏  举报