整数三分
int find(){
int l=1,r=n,m1,m2;
int tp1,tp2;
while(r-l>=3){//>=2会死循环
m1=(l+l+r)/3;
m2=(r+l+r)/3;
tp1=calc(m1);
tp2=calc(m2);
if(tp1<tp2) l=m1;
else r=m2;
}
int ans=-inf;
rep(i,l,r) ans=max(ans,calc(i));
return ans;
}
分数三分
db find(){
db l=1,r=n,m1,m2;
db tp1,tp2;
while(dis(l,r)>eps){
m1=(l+l+r)/3.0;
m2=(r+l+r)/3.0;
tp1=calc(m1);
tp2=calc(m2);
if(tp1<tp2) r=m2;
else l=m1;
}
tp1=calc(l);
tp2=calc(r);
return min(tp1,tp2);
}