二分(神秘

以后就写左闭右闭好不好,不要再绕进去了。

查找数值

  • 找目标值

  • 第一个/最后一个 大于等于/小于等于 x的位置

    //找第一个大于等于x
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(a[mid]>=x)
        {
            ans=mid;
            r=mid-1;
        }
        else  l=mid+1;
    }
    //最后一个大于等于x
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(a[mid]>=x)
        {
            ans=mid;
            l=mid+1;
        }
        else  r=mid-1;
    }
    //非常的不错,根本不坐牢
    
  • lower_bound(a.begin(),a.end(),x)第一个 大于等于 x的元素的指针

    auto it=lower_bound(a.begin(),a.end(),x)
    //*it是元素值
    //it-a.begin()是下标
    
  • upper_bound(a.begin(),a.end(),x)第一个 大于 x的元素的指针

我相信我会记混的。手写吧。

二分答案

  • 答案单调性
  • 最大值最小化/最小值最大化

浮点数二分

posted @ 2026-09-06 20:39  zzzdc  阅读(11)  评论(0)    收藏  举报