class Solution { public: void push(int value) { m=::min(m,value); auto*k=new TreeNode(value); k->right=st; st=k; } void pop() { if(m==st->val){ auto *k=st->right; m=k->val; while(k!=nullptr)m=::min(m,k->val),k=k->right; } st=st->right; } int top() { return st->val; } int min() { return m; } private: int m=0x3f; TreeNode*st; };