#include<bits/stdc++.h> #include <vector> using namespace std; void down(int r, vector<int>& h, int size) { //h->heap;r->root;l->larger_one; int l = r; if (r * 2 <= size && h[r * 2] > h[l]) l = r * 2; if (r * 2 + 1 <= size && h[r * 2 + 1] > h[l]) l = r * 2 + 1; if (r != l) { swap(h[r], h[l]); down(l, h, size); } return; } void up(int c, vector<int>& h) { //h->heap;c->child;l->larger_one; int l = c; if (c % 2 == 0 && h[c / 2] < h[l]) l = c / 2; else if (c % 2 == 1 && h[(c - 1) / 2] < h[l]) l = (c - 1) / 2; if (c != l) { swap(h[c], h[l]); if (l > 1) up(l, h); } return; } int main() { int n = 0, size = 0, x = 0; string s; cin >> n; vector<int> heap(n + 1, 0); while (n--) { cin >> s; if (s == "push") { cin >> x; heap[++size] = x; if (size != 1) up(size, heap); } else if (s == "top") { if (heap[1]) { cout << heap[1] << endl; } else { cout << "empty" << endl; } } else { if (heap[1]) { cout << heap[1] << endl; swap(heap[1], heap[size]); heap[size--] = 0; down(1, heap, size); } else { cout << "empty" << endl; } } } }