当前位置:网站首页>关于二分一些模板

关于二分一些模板

2022-06-22 05:23:00 hhyy_d

1.一般的二分模板有两套,假设a数组是一个上升数组,待查找的为x。

//查找第一个出现的x,如果没有x则输出待插入的位置。

int search(int l,int r,int x)
{
    
    while(l<r)
    {
    
        int mid = (l+r) / 2;
        if(a[mid]>=x) r = mid;
        else l = mid+1;
    }
    if(a[l]<x) return l+1;
    else return l;
}

//在数组中查找最后出现出现的x,找到就返回x的位置,没有找到就返回x应该插入的位置。

int search1(int l,int r,int x)
{
    
    while(l<r)
    {
    
        int mid = (l+r+1) / 2;
        if(a[mid]<=x) l = mid;
        else r = mid-1;
    }
    if(a[l] < x) return l+1;
    else return l;
}

2.关于lower_bound函数和upper_bound函数
lower_bound函数是返回有序数组中第一个大于等于X的指针,不存在就返回end;

int a[] = {1,2,3,3,5};
lower_bound(a,a+5,3)-a得到2。

upper_bound函数返回有序数组中第一个大于x的指针
upper_bound(a,a+5,3)-a返回4。
原网站

版权声明
本文为[hhyy_d]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45768588/article/details/123099574