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
#include <iostream>
#define MAX_POWER 201718

int main() {
    int n; int p; int d; int rest;
    std::cin >> n;
    int powers[MAX_POWER+1] = {0};

    for (int i = 0; i < n; i++) {
      std::cin >> p;
      powers[p] += 1;
    }

    for (int i = 0; i < MAX_POWER; i++) {
      d = powers[i] / 2;
      rest = powers[i] % 2;
      powers[i] = rest;
      powers[i+1] += d;
    }

    int result = 0;
    int i = MAX_POWER;
    if (powers[i] != 0) {
        result = MAX_POWER;
        d = powers[MAX_POWER];
        while (d > 1) {
          d = d / 2;
          result++;
        }
    } else {
      while (powers[i] == 0)
        i--;
      result = i;
    }

    std::cout << result;
    return 0;
}