#include #include #include class BinaryTree { public: struct Node { int value = -1; Node *father = nullptr, *left = nullptr, *right = nullptr; int depth = -1; }; Node* root = new Node({.depth = 0}); void init_full_tree(int height, const std::function& comp) { int id = 0; return init_full_tree(height, comp, 0, nullptr, id); } protected: void init_full_tree(int height, const std::function& comp, int current_depth, Node* current_node, int& id) { if (current_depth == 0) { current_node = root; } if (current_depth == height) { current_node->value = id++; return; } current_node->left = new Node(); current_node->right = new Node(); init_full_tree(height, comp, current_depth + 1, current_node->left, id); init_full_tree(height, comp, current_depth + 1, current_node->right, id); if (comp(current_node->left->value, current_node->right->value)) { current_node->value = current_node->right->value; } else { current_node->value = current_node->left->value; } } }; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; BinaryTree binary_tree; std::vector strengths; std::cin >> n; strengths.resize(static_cast(std::pow(2, n))); for (int& strength : strengths) { std::cin >> strength; } binary_tree.init_full_tree(n, [strengths](int i, int j) { return strengths[i] < strengths[j]; }); // std::cout << binary_tree.root->value << std::endl; int gold = binary_tree.root->value; int silver = binary_tree.root->left->value == gold ? binary_tree.root->right->value : binary_tree.root->left->value; std::cout << silver + 1 << std::endl; return 0; }