#include #include using namespace std; template class Stack { T* element; int length; int stackTop; const T INF = std::numeric_limits::max(); public: Stack(int l) { stackTop = -1; length = l; element = new T[l]; } ~Stack() { delete[] element; } T& top() { if (stackTop == -1) throw std::invalid_argument("No Top Element."); return element[stackTop]; } void pop() { if (stackTop == -1) throw std::invalid_argument("No Top Element."); stackTop--; } void push(const T& e) { if (stackTop == length - 1) { T* tmp = new T[2 * length]; for (int i = 0; i < length; i++) { tmp[i] = element[i]; } delete[] element; element = tmp; length *= 2; } stackTop++; element[stackTop] = e; } bool empty() const { return stackTop == -1; } }; int main() { int n; cin >> n; Stack s(n); for (int i = 0; i < n; i++) { int p; cin >> p; switch (p) { case 0: { if (!s.empty()) { cout << s.top() << endl; s.pop(); } else { cout << "invalid" << endl; } break; } case 1: { int val; cin >> val; s.push(val); break; } default: return 0; } } return 0; }