#pragma once
namespacehaar_lib{template<typenameMonoidUpdate,typenameMonoidGet>structaffine_min_max{usingmonoid_get=MonoidGet;usingmonoid_update=MonoidUpdate;usingvalue_type_get=typenameMonoidGet::value_type;usingvalue_type_update=typenameMonoidUpdate::value_type;value_type_getoperator()(constvalue_type_get&a,constvalue_type_update&b,int)const{value_type_getret;if(b.first>=0){if(a.min)ret.min=b.first*(a.min.value())+b.second;if(a.max)ret.max=b.first*(a.max.value())+b.second;}else{if(a.min)ret.max=b.first*(a.min.value())+b.second;if(a.max)ret.min=b.first*(a.max.value())+b.second;}returnret;}};}// namespace haar_lib