49 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from stack import Stack, from_list
 | 
						|
from heapq import heapify, heappush, heappop
 | 
						|
from random import shuffle
 | 
						|
 | 
						|
class MaxStack(Stack):
 | 
						|
    def __init__(self):
 | 
						|
        self.max = Stack()
 | 
						|
        super().__init__()
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        return super().__repr__()
 | 
						|
 | 
						|
    def push(self, x):
 | 
						|
        super().push(x)
 | 
						|
        max = self.get_max()
 | 
						|
        if not max:
 | 
						|
            self.max.push(x)
 | 
						|
        else:
 | 
						|
            self.max.push(max if x < max else x)
 | 
						|
 | 
						|
    def pop(self):
 | 
						|
        self.max.pop()
 | 
						|
        return super().pop()
 | 
						|
 | 
						|
    def get_max(self):
 | 
						|
        return self.max.peek()
 | 
						|
 | 
						|
xs = list(range(1, 11))
 | 
						|
shuffle(xs)
 | 
						|
stack = MaxStack()
 | 
						|
for x in xs:
 | 
						|
    stack.push(x)
 | 
						|
 | 
						|
print(stack)
 | 
						|
result = stack.get_max()
 | 
						|
print(result)
 | 
						|
assert result == 10
 | 
						|
 | 
						|
popped = stack.pop()
 | 
						|
print("Popped: {}".format(popped))
 | 
						|
print(stack)
 | 
						|
while popped != 10:
 | 
						|
    assert stack.get_max() == 10
 | 
						|
    popped = stack.pop()
 | 
						|
    print("Popped: {}".format(popped))
 | 
						|
    print(stack)
 | 
						|
 | 
						|
assert stack.get_max() != 10
 | 
						|
print("Success!")
 |