#include <iostream> #include <cstdio> #include <stack> #include <queue> #include <deque> // 支持下标访问 #include <algorithm> using namespace std; template<typename T> class StackWithMin { public : StackWithMin() {} virtual ~StackWithMin() {} const size_t size() const; void pop(); void push(const T& value); T top() const; T min(); private : deque<T> m_data; deque<T> m_min; }; template<typename T> const size_t StackWithMin<T>::size() const { return m_data.size(); } template<typename T> void StackWithMin<T>::pop() { assert(!m_data.empty() && !m_min.empty()); m_data.pop_front(); m_min.pop_front(); } template<typename T> void StackWithMin<T>::push(const T& value) { m_data.push_front(value); if(m_min.empty() || value < m_min[0]) { m_min.push_front(value); } else { m_min.push_front(m_min[0]); } } template<typename T> T StackWithMin<T>::top() const { assert(!m_data.empty() && !m_min.empty()); return m_data[0]; } template<typename T> T StackWithMin<T>::min() { assert(!m_data.empty() && !m_min.empty()); return m_min[0]; } int main() { return 0; }