#define MAX_INT 2147483647
int min (int a, int b) {
return a < b? a: b;
}
typedef struct {
int min[20001];
int stack[20001];
int top;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate() {
MinStack *obj = (MinStack *) malloc (sizeof (MinStack));
obj->top = 0;
obj->stack[0] = obj->min[0] = MAX_INT;
return obj;
}
void minStackPush(MinStack* obj, int x) {
obj->stack[++obj->top] = x;
obj->min[obj->top] = min (obj->min[obj->top - 1], x);
}
void minStackPop(MinStack* obj) {
--obj->top;
}
int minStackTop(MinStack* obj) {
return obj->stack[obj->top];
}
int minStackMin(MinStack* obj) {
return obj->min[obj->top];
}
void minStackFree(MinStack* obj) {
free (obj);
}