二分答案
1 功能:
- 用于解决最大的最小值和 最小的最大值。(基本题型)
- 直接可以减少一个元素的处理,减少思维复杂度,而且只增加了少量的时间复杂度。
- 当遇到某一个元素特别难处理时,看能不能用二分把他剥离出来。
- 比如求第几大问题
2 适用条件:
1 查找的 答案 一个连续区间内的。
2 这个答案要是单调的。
4 注意:
- 看l能不能等于0;他的最大和最小值的范围是哪些
3 工具:lower_bound
与upper_bound
- int b=lower_bound(p+1,p+1+n,x)-p; (二分)第一个大于等于的。
- upper_bound 同理,第一个大于的。
int l=1,r=n,ans=-1; while(l<=r) { int mid=(l+r)>>1; if(ck(mid)) { ans=mid; r=mid-1; } else l=mid+1; }// qu xiao while(l<=r) { int mid=(l+r)>>1; if(ck(mid)) { ans=mid; l=mid+1; } else r=mid-1; }