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
#include <bits/stdc++.h>

using namespace std;

const int TAB_SIZE = 500000;
int buckets[TAB_SIZE];

int main(){
  int n, tmp, max_value;
  cin >> n;
  max_value = numeric_limits<int>::min();

  for(int i= 0; i < n; ++i){
    cin >> tmp;
    max_value = max(max_value, tmp);
    buckets[tmp]++;
  }

  for(int i = 0; i < max_value; ++i){
    if(buckets[i]/2 > 0){
      buckets[i+1] += buckets[i]/2;
      buckets[i] %= 2;
    }
  }
  for(int i = max_value; i < TAB_SIZE; ++i){
    if(buckets[i] == 0){
      cout << i-1 << endl;
      break;
    }
    buckets[i+1] += buckets[i]/2;
    buckets[i] %= 2;

  }


  return 0;
}