double f(double x){ //something } const double eps=1e-8; double sanfen(double l, double r){ double mid,midr,ans; while (fabs(r-l)>eps) { mid=(l+r)/2; midr=(mid+r)/2; if(f(mid) < f(midr)) l=mid; else r=midr; //求最大值 } ans=f(l); return ans; }
int SanFen(int l,int r) {//找凸点 while(l < r-1) { int mid = (l+r)/2; int mmid = (mid+r)/2; if( f(mid) > f(mmid) ) r = mmid; else l = mid; } return f(l) > f(r) ? l : r; }
const double EPS = 1e-6;//0.000001 while (l + EPS < r) { ml = l + (r-l) / 3; mr = r - (r-l) / 3; if (calc(ml) < calc(mr)) l = ml; else r = mr; }
用于解决 一元二次函数问题