三分算法 模板
三分有两种写法
两种模型分别是:先增后减,先减后增
两种模型写法相反
在这存下板子,怕记反了模型的写法
先增再减模型 #define eps 1e-8 int sanfen(int l,int r){ //第一种写法 int l,r; while(l + eps < r){ m1 = (l+r)/2; m2 = (m1+r)/2; if(f(m1) >= f(m2)) r = m2; else l = m1; } return l; } int sanfen(int l,int r){ //第二种写法 int l,r; while(l + eps < r){ m1 = l+(r-l)/3; m2 = r-(r-l)/3; if(f(m1) < f(m2)) l = m1; else r = m2; } return l; } 先减再增模型 int sanfen(int l,int r){ //第一种写法 int l,r; while(l + eps < r){ m1 = (l+r)/2; m2 = (m1+r)/2; if(f(m1) >= f(m2)) l = m1; else r = m2; } return l; } int sanfen(int l,int r){ //第二种写法 int l,r; while(l + eps < r){ m1 = l+(r-l)/3; m2 = r-(r-l)/3; if(f(m1) < f(m2)) r = m2; else l = m1; } return l; }