int StackWithMin::pop() { int n = s1.pop(); // 最小値だった場合は一つ取り出して、以前の最小値を最新にする. if(n == s2.last() && s2.size() > 1){ s2.pop(); } return n; }
void StackWithMin::push(int n) { s1.push(n); if(s2.size() == 0){ s2.push(n); }else{ // 現在の追加値が最小値よりも小さい. if(n < s2.last()){ s2.push(n); } } }