最值栈

    这个最简单了,就是用一个最大值栈和一个最小值栈来维护最值信息。

template<typename T>
class stack_ext : public stack<T>
{
public:
    void push(const typename stack<T>::value_type &t)
    {
        if (m_sMax.empty() || t >= m_sMax.top())
        {
            m_sMax.push(t);
        }
 
        if (m_sMin.empty() || t <= m_sMin.top())
        {
            m_sMin.push(t);
        }
 
        stack<T>::push(t);
    }
 
    void pop()
    {
        if (!m_sMax.empty() && stack<T>::top() == m_sMax.top())
        {
            m_sMax.pop();
        }
 
        if (!m_sMin.empty() && stack<T>::top() == m_sMin.top())
        {
            m_sMin.pop();
        }
 
        stack<T>::pop();
    }
    
    typename stack<T>::const_reference max_val() const
    {
        return m_sMax.top();
    }
 
    typename stack<T>::const_reference min_val() const
    {
        return m_sMin.top();
    }
 
private:
    stack<T> m_sMin;
    stack<T> m_sMax;
};
posted @ 2012-09-12 10:45  紫红的泪  阅读(264)  评论(0编辑  收藏  举报