#pragma once
namespaceTernarySearch{template<classI,classV,classF>pair<I,V>integer_min(Ilow,Ihigh,Ff){assert(low<=high);while(high-low>I(2)){Id=(high-low)/3;Imidl=low+d;Imidr=low+d*2;if(f(midl)>=f(midr))low=midl;elsehigh=midr;}Iminx=low;Vminv=f(minx);for(Ix=low+1;x<=high;x++){Vv=f(x);if(v<minv){minx=x;minv=v;}}returnpair<I,V>(minx,minv);};template<classI,classV,classF>pair<I,V>integer_max(Ilow,Ihigh,Ff){assert(low<=high);while(high-low>I(2)){Id=(high-low)/3;Imidl=low+d;Imidr=low+d*2;if(f(midl)<=f(midr))low=midl;elsehigh=midr;}Imaxx=low;Vmaxv=f(maxx);for(Ix=low+1;x<=high;x++){Vv=f(x);if(v>maxv){maxx=x;maxv=v;}}returnpair<I,V>(maxx,maxv);};};// namespace TernarySearch