Очередь с поддержкой минимума всех элементов



Необходимо реализовать структуру данных, которая за O(1) добавляет элемент в множество, извлекает из него первый добавленный элемент и находит минимум всех элементов множества.

    Будем использовать два стека с поддержкой минимума. В один стек мы будем добавлять элементы, а из другого извлекать. Когда в стек, из которого мы извлекаем элементы, окажется пуст, то переписываем все элементы из другого стека в него. Минимум будет равен минимальному из минимумов обоих стеков.


Листинг C++

#include <stack>
using namespace std;

class queue_min
{
private :
    stack_min s1, s2;
public :
    void pop ()
    {
        if (s1.size ())
            s1.pop ();
        else
        {
            while (s2.size ())
            {
                s1.push (s2.top ());
                s2.pop ();
            }
            if (s1.size ())
                s1.pop ();
        }
    }
    void push (int x)
    {
        s2.push (x);
    }
    int minimum ()
    {
        return min (s1.minimum (), s2.minimum ());
    }
};


13:57
05.08.2009


По всем вопросам обращаться: rumterg@gmail.com