intbinary_search(vector<int>& a,int q){int l =-1, r = a.size();while(l +1< r){int mid = l + r >>1;if(a[mid]<= q) l = mid;// l 一直在可行区内else r = mid;// r 一直在不可行区内}return l;}
1.2 最小化查找
intbinary_search(vector<int>& a,int x){int l =-1, r = a.size();while(l +1< r){int mid = l + r >>1;if(a[mid]>= x) r = mid;// r 一直在可行区内else l = mid;// l 一直在不可行区内}return r;}
2、浮点数二分
boolcheck(double x){/* ... */}// 检查x是否满足某种性质doublebinary_search(double l,double r){constdouble eps =1e-6;// eps表示精度,比题目要求小数位多两位即可while(r - l > eps){double mid =(l + r)/2;if(check(mid)) l = mid;else r = mid;}return l;}