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



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

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


Листинг C++

#include <stack>
using namespace std;

class stack_min
{
private :
    class elem
    {
    public :
        int a, m;
        elem (int _a = 0, int _m = 0) : a (_a), m (_m) {};
    };    
    stack < elem > s;
    
public :
    
    void pop ()
    {
        s.pop ();
    }
    int minimum ()
    {
        return s.size () <= 0 ? 1e9 : s.top ().m;
    }
    void push (int x)
    {
        s.push (elem (x, min (x, minimum ())));
    }
};


13:37
05.08.2009


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