#include <iostream> using namespace std; typedef long long ll; ll a[202800]; ll p[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576 }; int main() { ios_base::sync_with_stdio(false); ll n; ll b; cin >> n; for (int i = 0; i < n; i++) { cin >> b; a[b]++; } ll max = -1; for (int i = 0; i < 202800; i++) { if (a[i] > 0) max = i; else continue; bool wasChange = false; do { wasChange = false; for (int j = 1; j < 20; j++) //largest p { if (p[j] <= a[i] && p[j+1] > a[i]) { wasChange = true; a[i+j]++; a[i] -= p[j]; } } } while (wasChange); } cout << max << 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> using namespace std; typedef long long ll; ll a[202800]; ll p[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576 }; int main() { ios_base::sync_with_stdio(false); ll n; ll b; cin >> n; for (int i = 0; i < n; i++) { cin >> b; a[b]++; } ll max = -1; for (int i = 0; i < 202800; i++) { if (a[i] > 0) max = i; else continue; bool wasChange = false; do { wasChange = false; for (int j = 1; j < 20; j++) //largest p { if (p[j] <= a[i] && p[j+1] > a[i]) { wasChange = true; a[i+j]++; a[i] -= p[j]; } } } while (wasChange); } cout << max << endl; return 0; } |