#include <cstdio>
#include <algorithm>
#include <unordered_map>
using namespace std;
int n, a;
int act_max;
unordered_map<int, int> M;
int main() {
scanf("%d", &n);
for(int i = 0; i < n; ++i) {
scanf("%d", &a);
act_max = max(a, act_max);
if(M.count(a) == 0) {
M[a] = 1;
} else M[a] = M[a] + 1;
}
int act = 0;
while(act <= act_max) {
if(M.count(act) > 0) {
int to_move = M[act] / 2;
if(to_move > 0) {
act_max = max(act + 1, act_max);
}
if(M.count(act + 1) == 0) {
M[act + 1] = to_move;
} else M[act + 1] += to_move;
}
++act;
}
printf("%d\n", act_max);
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 | #include <cstdio> #include <algorithm> #include <unordered_map> using namespace std; int n, a; int act_max; unordered_map<int, int> M; int main() { scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%d", &a); act_max = max(a, act_max); if(M.count(a) == 0) { M[a] = 1; } else M[a] = M[a] + 1; } int act = 0; while(act <= act_max) { if(M.count(act) > 0) { int to_move = M[act] / 2; if(to_move > 0) { act_max = max(act + 1, act_max); } if(M.count(act + 1) == 0) { M[act + 1] = to_move; } else M[act + 1] += to_move; } ++act; } printf("%d\n", act_max); return 0; } |
English