add <algorithm> for std::min, std::max