struct Maxf{ template <typename T>static const T f(const T& a, const T& b){return a>b?a:b;} }; struct Minf{ template <typename T>static const T f(const T& a, const T& b){return a<b?a:b;} };
template<class M,typename T >struct Func { static const T f(const T* p, int n) { T m = p[0]; for(int i = 1 ; i < n ; i++){ m = M::f(m,p[i]);} return m; } };