二分(上界,下界)模板

二分查找:(Binary Search) 只适用有序序列

二分查找 (迭代实现)

int bsearch(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key == A[m]) return m;
                else if (key < A[m]) r = m;
                else l = m+1;
        }
        return -1;
}

下界:(lower_bound)当key存在return第一次出现的位置,如果不存在return 一个下标 i(把key插入i位置,序列仍有序).

上界:(up_bound)当key存在return最后一次出现的位置的下一个位置,如果不存在return 一个下标 i(把key插入i位置,序列仍有序).

找下界:

int lower_bound(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key <= A[m]) r = m;
                else l = m+1;
        }
        return l;
}
找上界:
int up_bound(int *A,int l,int r,int key)
{
        
        int m;
        while(l<r)
        {
                m = l+(r-l)/2;
                if(key >= A[m]) l = m+1;
                else r = m;
        }
        return l;
}

阅读更多
个人分类: 二分 模板
上一篇UVA - 455 Periodic Strings
下一篇dijkstra模板
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭