class StackMax:
def __init__(self):
self.stack = []
self.max_stack = []
def push(self, item):
self.stack.append(item)
if not self.max_stack or item >= self.max_stack[-1]:
self.max_stack.append(item)
def pop(self):
if not self.stack:
print("error")
return
popped_item = self.stack.pop()
if popped_item == self.max_stack[-1]:
self.max_stack.pop()
print(popped_item)
def size(self):
print(len(self.stack))
def get_max(self):
if not self.stack:
print("None")
return
print(self.max_stack[-1])
n = int(input())
stack_max = StackMax()
for _ in range(n):
command = input().split()
if command[0] == "push":
stack_max.push(int(command[1]))
elif command[0] == "pop":
stack_max.pop()
elif command[0] == "size":
stack_max.size()
elif command[0] == "get_max":
stack_max.get_max()
push(item) – добавляет элемент в стек,
pop() – выводит на экран значение элемента из стека и удаляет его, если стек пуст, то вывести «error»,
size() – выводит на экран размер стека (количество элементов),
get_max() – выводит на экран максимальное значение стека, если стек пуст то вывести None.
Методы size() и get_max() должны выполняться за O(1), для этого вычисление размера стека и максимального элемента стека необходимо производить одновременно с операциями push() и pop().
С клавиатуры вводится одно целое число - количество команд. Затем вводятся сами команды в формате:
push x – команда добавляет элемент в стек и ничего не выводит,
pop – выводит на экран значение элемента стека и удаляет его, если стек пуст, то вывести «error»,
size – выводит на экран размер стека,
get_max – выводит на экран максимальное значение стека, если стек пуст то вывести None.
Входные данные:
Вводится одно целое число n - количество команд, затем n строк с командами.
Выходные данные:
Выводятся строки.
Пример ввода:
9
push 6
get_max
pop
push 5
push 8
size
get_max
pop
get_max
Пример вывода:
6
2
8
5