SCL--二分与lower_bound / upper_bound

2016-07-13 19:20:06

使用手写二分实现lower_bound与upper_bound:

lower_bound: 第一个 >= v 的位置。

upper_bound: 第一个 > v 的位置。

lower_bound:

int l = 1,r = n,ans;
    while(l < r){
        int mid = getmid(l,r);
        if(A[mid] < v) l = mid + 1;
        else r = mid;
    }
    ans = l;

 

upper_bound:

写法1:

int l = 1,r = n,ans;
    while(l <= r){
        int mid = getmid(l,r);
        if(A[mid] <= v) l = mid + 1;
        else r = mid - 1;
    }
    ans = l;

写法2:

int l = 1,r = n,ans;
    while(l < r){
        int mid = getmid(l,r);
        if(A[mid] <= v) l = mid + 1;
        else r = mid;
    }
    if(A[l] <= v) l++;
    ans = l;

 

转载于:https://www.cnblogs.com/naturepengchen/articles/5668020.html

你可能感兴趣的:(SCL--二分与lower_bound / upper_bound)