Есть задача:
Очередь с поддержкой минимума
Реализуйте очередь с поддержкой минимума.
Входные данные
Первая строка входных данных содержит число n — количество операций с очередью. В каждой следующей строке содержится число a (0≤a≤10000). Если a>0, то это число необходимо добавить в очередь. Если a=0, то это запрос на удаление элемента из очереди.
Выходные данные
На каждый запрос удаления элемента из очереди необходимо вывести значение минимального элемента очереди (учитывая значение удаляемого элемента). Если запрос удаления вызывается на пустой очереди, то необходимо вывести −1.
Есть следующая реализация очереди с минимумом через два стека.
class Stack_min:
def __init__(self):
self.stack = []
self.stack_min = []
def push(self, e):
self.stack.append(e)
if self.stack_min and self.stack_min[-1] < e:
self.stack_min.append(self.stack_min[-1])
else:
self.stack_min.append(e)
return self
def pop(self):
if self.stack != []:
self.stack_min.pop()
return self.stack.pop()
def min(self):
if self.stack_min:
return self.stack_min[-1]
def aslist(self):
return self.stack
def back(self):
if self.stack != []:
return self.stack[-1]
def size(self):
return len(self.stack)
def clear(self):
self.stack.clear()
self.stack_min.clear()
return self
class Queue_min:
def __init__(self):
self.s1 = Stack_min()
self.s2 = Stack_min()
def _copy(self):
if self.s2.size() == 0:
while self.s1.size():
self.s2.push(self.s1.pop())
def push(self, e):
self.s1.push(e)
return self
def pop(self):
self._copy()
return self.s2.pop()
def front(self):
self._copy()
return self.s2.back()
def size(self):
return self.s1.size() + self.s2.size()
def min(self):
self._copy()
return self.s2.min()
def clear(self):
self.s1.clear()
self.s2.clear()
return self
queue = Queue_min()
for i in range(int(input())):
inp = int(input())
if inp != 0:
queue.push(inp)
else:
if not queue.size():
print(-1)
else:
print(queue.min())
queue.pop()
При сдаче задачи система возвращает ошибку "Программа выдаёт неверный ответ". В чём может быть проблема?