-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathG_Stack_MaxEffective.py
89 lines (74 loc) · 2.5 KB
/
G_Stack_MaxEffective.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""
G. Стек - MaxEffective
Реализуйте класс 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».
Пример 1
Ввод Вывод
10
pop
pop
push 4
push -5
push 7
pop
pop
get_max
pop
get_max
error
error
4
None
Вывод
error
error
4
None
"""
class StackMaxEffective:
def __init__(self):
self.items = []
def __bool__(self):
return bool(self.items)
def push(self, item):
if self.items:
new_max = max(item, self.items[-1][1])
else:
new_max = item
self.items.append((item, new_max))
def pop(self):
return self.items.pop()[0]
def get_max(self):
return self.items[-1][1]
if __name__ == '__main__':
stack = StackMaxEffective()
n = int(input())
for _ in range(n):
cmd = input().split()
if cmd[0] == 'pop':
if stack:
stack.pop()
else:
print('error')
if cmd[0] == 'push':
stack.push(int(cmd[1]))
if cmd[0] == 'get_max':
if stack:
print(stack.get_max())
else:
print('None')