Реализуйте класс StackMaxEffective, поддерживающий операцию определения максимума среди элементов в стеке. Сложность операции должна быть O(1). Для пустого стека операция должна возвращать None. При этом push(x) и pop() также должны выполняться за константное время.
Формат ввода
В первой строке записано одно число — количество команд, оно не превосходит 100000. Далее идут команды по одной в строке. Команды могут быть следующих видов:
push(x) — добавить число x в стек;
pop() — удалить число с вершины стека;
get_max() — напечатать максимальное число в стеке;
Если стек пуст, при вызове команды get_max нужно напечатать «None», для команды pop — «error».
Формат вывода
Для каждой команды get_max() напечатайте результат её выполнения. Если стек пустой, для команды get_max() напечатайте «None». Если происходит удаление из пустого стека — напечатайте «error».
class StackMaxEffective:
def __init__(self):
self.items = []
self.max = []
def isEmpty(self):
return self.items == []
def push(self, item):
if len(self.items) == 0:
self.max.append(int(item))
elif int(item) > self.max[len(self.items)-1]:
self.max.append(int(item))
else:
self.max.append(self.max[len(self.items)-1])
self.items.append(item)
def get_max(self):
if self.isEmpty():
return 'None'
return self.max[len(self.items) - 1]
def pop(self):
if self.isEmpty():
return 'error'
self.max.pop()
return self.items.pop()
s = StackMaxEffective()
n = int(input())
result = []
for i in range(n):
command = input().split()
if command[0] == 'push':
s.push(command[1])
if command[0] == 'pop':
if pop(s) == 'error':
result.append('error')
if command[0] == 'get_max':
result.append(s.get_max())
for i in result:
print(i)