一、整数定义域上的二分
【代码实现】
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的排名。