#include <iostream>
#include <string>
#include <queue>
using namespace std;
typedef pair<int, int> P;
priority_queue< P, vector<P>, greater<P> > q;
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
long long pow;
cin >> pow;
q.push(std::make_pair(pow, 1L));
}
while (q.size() > 1) {
std::pair<long long,long long> p1 = q.top();
q.pop();
std::pair<long long,long long> p2 = q.top();
q.pop();
if (p1.first == p2.first) {
q.push(std::make_pair(p1.first, p1.second + p2.second));
} else {
q.push(p2);
if (p1.second > 1) {
q.push(std::make_pair(p1.first+1, p1.second/2));
}
}
}
std::pair<long long, long long> ans = q.top();
q.pop();
while(ans.second > 1){
ans.first++;
ans.second /= 2;
}
cout << ans.first<< endl;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <iostream> #include <string> #include <queue> using namespace std; typedef pair<int, int> P; priority_queue< P, vector<P>, greater<P> > q; int main() { int N; cin >> N; for (int i = 0; i < N; i++) { long long pow; cin >> pow; q.push(std::make_pair(pow, 1L)); } while (q.size() > 1) { std::pair<long long,long long> p1 = q.top(); q.pop(); std::pair<long long,long long> p2 = q.top(); q.pop(); if (p1.first == p2.first) { q.push(std::make_pair(p1.first, p1.second + p2.second)); } else { q.push(p2); if (p1.second > 1) { q.push(std::make_pair(p1.first+1, p1.second/2)); } } } std::pair<long long, long long> ans = q.top(); q.pop(); while(ans.second > 1){ ans.first++; ans.second /= 2; } cout << ans.first<< endl; return 0; } |
English