#include <iostream> #include <string> using namespace std; template<typename T> class StackWithMin { stack data; stack minStack; void push(const T& val) { data.push(val); if (minStack.size() == 0 || val < minStack.top()) { minStack.push(val); } else { minStack.push(minStack.top()); } } void pop() { if (data.size() == 0) { return; } data.pop(); minStack.pop(); } T& min() { if (minStack.size() == 0) { return; } return minStack.top(); } };