<s> class MinStack : <EOL> def __init__ ( self ) : <EOL> self . min = None <EOL> self . stack = [ ] <EOL> def push ( self , x ) : <EOL> if not self . stack : <EOL> self . stack . append ( <NUM_LIT:0> ) <EOL> self . min = x <EOL> else : <EOL> self . stack . append ( x - self . min ) <EOL> if x < self . min : <EOL> self . min = x <EOL> def pop ( self ) : <EOL> x = self . stack . pop ( ) <EOL> if x < <NUM_LIT:0> : <EOL> self . min = self . min - x <EOL> def top ( self ) : <EOL> x = self . stack [ - <NUM_LIT:1> ] <EOL> if x > <NUM_LIT:0> : <EOL> return x + self . min <EOL> else : <EOL> return self . min <EOL> def getMin ( self ) : <EOL> return self . min <EOL> class MinStack2 : <EOL> def __init__ ( self ) : <EOL> self . stack , self . minStack = [ ] , [ ] <EOL> def push ( self , x ) : <EOL> self . stack . append ( x ) <EOL> if len ( self . minStack ) : <EOL> if x < self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:0> ] : <EOL> self . minStack . append ( [ x , <NUM_LIT:1> ] ) <EOL> elif x == self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:0> ] : <EOL> self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:1> ] += <NUM_LIT:1> <EOL> else : <EOL> self . minStack . append ( [ x , <NUM_LIT:1> ] ) <EOL> def pop ( self ) : <EOL> x = self . stack . pop ( ) <EOL> if x == self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:0> ] : <EOL> self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:1> ] -= <NUM_LIT:1> <EOL> if self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:1> ] == <NUM_LIT:0> : <EOL> self . minStack . pop ( ) <EOL> def top ( self ) : <EOL> return self . stack [ - <NUM_LIT:1> ] <EOL> def getMin ( self ) : <EOL> return self . minStack [ - <NUM_LIT:1> ] [ <NUM_LIT:0> ] <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> stack = MinStack ( ) <EOL> stack . push ( - <NUM_LIT:1> ) <EOL> print [ stack . top ( ) , stack . getMin ( ) ] </s>
