text: /*
  问题描述：
  利用栈实现最小栈
  Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
  
  push(x) -- Push element x onto stack.
  pop() -- Removes the element on top of the stack.
  top() -- Get the top element.
  getMin() -- Retrieve the minimum element in the stack.
  Example:
  MinStack minStack = new MinStack();
  minStack.push(-2);
  minStack.push(0);
  minStack.push(-3);
  minStack.getMin();   --> Returns -3.
  minStack.pop();
  minStack.top();      --> Returns 0.
  minStack.getMin();   --> Returns -2.
  */
  
  class MinStack {
  private:
      stack<int> s;
      stack<int> sm;
      
  public:
      /** initialize your data structure here. */
      //题意意思用栈实现最小栈
      
      MinStack() {
          
      }
      
      void push(int x) {
          s.push(x);
          if (sm.empty() || sm.top() >= x) {      //注意等于也要入栈的
              sm.push(x);
          }
      }
      
      void pop() {
          if (sm.top() == s.top()) {
              sm.pop();
          }
          s.pop();
      }
      
      int top() {
          return s.top();
      }
      
      int getMin() {
          return sm.top();
      }
  };
  
  /**
   * Your MinStack object will be instantiated and called as such:
   * MinStack obj = new MinStack();
   * obj.push(x);
   * obj.pop();
   * int param_3 = obj.top();
   * int param_4 = obj.getMin();
   */
  