#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; } |