优美的二分模型

在序列中寻找大于等于x的最小值

 

int findl(int x) 
{
    int l = 1, r = n + 1;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(a[mid].pos >= x)
            r = mid;
        else
            l = mid + 1;
    }
  //mid取不到r,而r一开始取n+1有利于查找正确答案
}

 

在序列中寻找小于等于x的最大值

 

int findr(int x)                   
{
    int l = 0, r = n;
    while(l < r)
    {
        int mid = l + r + 1 >> 1;
        if(a[mid].pos<= x)
            l = mid;
        else
            r = mid - 1;
    }
   //原理同上
}

 

posted @ 2019-11-02 13:19  Gold_stein  阅读(155)  评论(0编辑  收藏  举报