二分

一、整数定义域上的二分

【代码实现】

int erfen(int l,int r){
    int l=1,r=n,ans;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid))ans=mid,l=mid+1;//若满足要求,记下答案 
        else r=mid-1;
    } 
}

二、 二分法常见模型

    1.二分答案

        最小值最大/最大值最小问题,这类双最值问题一般选取二分法求解,也就是确定答案后,配合贪心、dp等其他算法检验这个答案是否合理,将最优化问题转换为判定性问题。例如,将长度为n的序列a分成最多m个连续段,求将所有分法中每段和的最大值最小是做少?

     2.二分查找

         用具有单调性的布尔表达式求解分界点。比如,在有序数列中求数字x的排名。

 

原文地址:https://www.cnblogs.com/zhugezisong/p/11343590.html