#include <iostream>
#include <algorithm>
const int MAX = 201718;
using namespace std;
int map[MAX + 1];
int main()
{
ios::sync_with_stdio(false);
int n, solution, max_pow = 0, min_pow = MAX + 1;
std::fill(map, map + MAX, 0);
cin >> n;
while(n--)
{
cin >> solution;
++map[solution];
if(solution > max_pow)
{
max_pow = solution;
}
if(solution < min_pow)
{
min_pow = solution;
}
}
solution = min_pow;
for(int i = min_pow; i < MAX; ++i)
{
map[i + 1] += map[i] / 2;
if (map[i + 1] > 0)
{
solution = i + 1;
}
else if(i >= max_pow)
{
cout << solution << endl;
return 0;
}
}
// continue work...
while (map[MAX] >= 2)
{
map[MAX] /= 2;
++solution;
}
cout << solution << 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 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <algorithm> const int MAX = 201718; using namespace std; int map[MAX + 1]; int main() { ios::sync_with_stdio(false); int n, solution, max_pow = 0, min_pow = MAX + 1; std::fill(map, map + MAX, 0); cin >> n; while(n--) { cin >> solution; ++map[solution]; if(solution > max_pow) { max_pow = solution; } if(solution < min_pow) { min_pow = solution; } } solution = min_pow; for(int i = min_pow; i < MAX; ++i) { map[i + 1] += map[i] / 2; if (map[i + 1] > 0) { solution = i + 1; } else if(i >= max_pow) { cout << solution << endl; return 0; } } // continue work... while (map[MAX] >= 2) { map[MAX] /= 2; ++solution; } cout << solution << endl; return 0; } |
English