三分 模板

整数三分

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);
}
posted @ 2017-02-23 11:53  _zwl  阅读(402)  评论(0编辑  收藏  举报