#include #include #include #include using LL = long long; int main() { int N; std::cin >> N; std::vector H(N); for (auto& x : H) { std::cin >> x; } std::sort(H.begin(), H.end()); auto check = [&](int x) -> bool { std::priority_queue q; for (int i = 0; i < N - std::max(x - 60, 0); i++) { q.emplace(H[i]); } for (x = std::min(x, 60) - 1; x >= 0; x--) { if (q.empty()) { break; } auto t = q.top(); q.pop(); t -= (1LL << x); if (t > 0) { q.emplace(t); } } return q.empty(); }; int left = N; int right = N + 60; while (left < right) { int mid = (left + right) / 2; if (check(mid)) { right = mid; } else { left = mid + 1; } } std::cout << left << std::endl; return 0; }