using System.Collections;
static void Main(string[] args)
var stack = new SpecialStack();
Console.WriteLine($"Min: {stack.GetMin()}");
Console.WriteLine($"Popped: {stack.Pop()}");
Console.WriteLine($"Popped: {stack.Pop()}");
Console.WriteLine($"Min: {stack.GetMin()}");
Console.WriteLine($"Popped: {stack.Pop()}");
Console.WriteLine($"Popped: {stack.Pop()}");
private Stack _stack = new Stack();
private int _min_element = int.MaxValue;
public void Push(int value)
if (value < _min_element)
_stack.Push(2*value -_min_element);
var y = (int)_stack.Pop();
var to_return = _min_element;
_min_element = 2*_min_element - y;