三分算法模板

二分可以在y = kx + b上找答案。(单调递减 , 单调递增)

而三分可以在y = ax^2 + bx + c上找答案。(单峰函数)

我们令:

m1 = l+r >> 1 , m2 = m1 + r >>1;

然后会有三种情况。

当m1 > m2 , 极值在l ~ m1

当m1 <= m2,极值在m2 ~ r.

then

三分模板:

void tri_search()
{
	int l=0 , r = k,m1(0),m2(0);
	while(l<=r)
	{
		m1 = l+r >> 1 , m2 = m1 + r >>1; 
		if(calc(m1)  > calc(m2)) 
		 r = m2-1;
		else   l = m1+1;
		ans = max(ans , max(calc(m1) , calc(m2)));
	}
}

tips:其实就是m1和m2那边小那边砍

注意每次ans都要和m1和m2取max。