Условие
Реализуйте класс IntStack, работающий по принципу LIFO: последним добавленный элемент извлекается первым. Храните элементы в закрытом массиве фиксированной вместимости 1000 и задайте рабочую вместимость capacity конструктором. Использование готовых контейнеров, включая std::stack и std::vector, запрещено.
Предусмотрите методы bool push(int value), bool pop(int &value), bool top(int &value) const, int size() const, bool empty() const. pop удаляет верхний элемент и записывает его в выходной параметр; top только читает верхний элемент. При переполнении или обращении к пустому стеку операция возвращает false, не изменяя стек и выходной параметр. При успехе — true.
Обработайте команды PUSH value, POP, TOP, SIZE, EMPTY.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводятся capacity и Q. Следующие Q строк содержат команды. Ограничения: 1 ≤ capacity ≤ 1000, 1 ≤ Q ≤ 10000, −10⁶ ≤ value ≤ 10⁶.
Выходные данные
Для PUSH выведите OK или FULL; для POP и TOP — значение либо EMPTY; для SIZE — размер стека; для EMPTY — YES или NO. Каждый ответ выведите с новой строки.
Примеры
2 7 PUSH 10 PUSH 20 TOP POP TOP SIZE EMPTY
OK OK 20 20 10 1 NO
1 6 POP PUSH 7 PUSH 8 POP TOP EMPTY
EMPTY OK FULL 7 EMPTY YES
2 5 PUSH -5 POP PUSH 0 TOP SIZE
OK -5 OK 0 1