int find_max() { return a[1]; } void insert(int val) { a[++n] = val; for (int x = n; a[x / 2] < a[x]; x /= 2) swap(a[x], a[x / 2]); } int big_child(int x) { if (2 * x + 1 <= n && a[2 * x + 1] > a[2 * x]) return 2 * x + 1; else if (2 * x <= n) return 2 * x; else return -1; } void delete_max() { swap(a[1], a[n--]); for (int x = 1; big_child(x) != -1 && a[x] < a[big_child(x)]; x = big_child(x)) swap(a[x], a[big_child(x)]); }