二分(神秘
以后就写左闭右闭好不好,不要再绕进去了。
查找数值
-
找目标值
-
第一个/最后一个 大于等于/小于等于 x的位置
//找第一个大于等于x while(l<=r) { int mid=(l+r)>>1; if(a[mid]>=x) { ans=mid; r=mid-1; } else l=mid+1; } //最后一个大于等于x while(l<=r) { int mid=(l+r)>>1; if(a[mid]>=x) { ans=mid; l=mid+1; } else r=mid-1; } //非常的不错,根本不坐牢 -
lower_bound(a.begin(),a.end(),x)第一个 大于等于 x的元素的指针auto it=lower_bound(a.begin(),a.end(),x) //*it是元素值 //it-a.begin()是下标 -
upper_bound(a.begin(),a.end(),x)第一个 大于 x的元素的指针
我相信我会记混的。手写吧。
二分答案
- 答案单调性
- 最大值最小化/最小值最大化

浙公网安备 33010602011771号