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
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
#include <bits/stdc++.h>

using namespace std;
#define INF 1010000000
#define EPS 1E-6
#define MP make_pair
#define ST first
#define ND second
#define REP(i, n) for(int i = 0; i < (n); ++i)
#define REPD(i, n) for(int i = (n) - 1; i >= 0; --i)
#define FOR(i, a, n) for(int i = (a); i <= (n); ++i)
#define FORD(i, a, n) for(int i = (a); i >= (n); --i)
#define DD(x, args...) { vector<string> _v = _split(#args, ','); _err(x, _v.begin(), args); }
#define D(args...) DD(", ", args)
#define DE(args...) DD("\n", args)
#define D2(a, args...) { cerr << a << ": "; D(args); }
#define DD2(x, a, args...) { cerr << a << ": "; DD(x, args); }
#define E cerr << endl;
#define OUT(...) ostream &operator<<(ostream &ost, const __VA_ARGS__ &_cnt) { return _out(ost, ALL(_cnt)); }
#define SZ(x) ((int)(x).size())
#define PB push_back
#define EB emplace_back
#define ALL(x) x.begin(), x.end()
#define endl '\n'

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<double, double> PDD;

template<class c1> ostream &_out(ostream &ost, c1 a, c1 b);

template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt);

template<class T1> OUT(vector<T1>);
template<class T1> OUT(deque<T1>);
template<class T1> OUT(list<T1>);
template<class T1, class T2> OUT(set<T1, T2>);
template<class T1, class T2> OUT(multiset<T1, T2>);
template<class T1, class T2, class T3> OUT(map<T1, T2, T3>);
template<class T1, class T2, class T3> OUT(multimap<T1, T2, T3>);
template<class T1, size_t T2> OUT(array<T1, T2>);

template<class T1, class T2>
ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt)
	{ return ost << '(' << _cnt.ST << ", " << _cnt.ND << ')'; }

template<class T1>
ostream &_out(ostream &ost, T1 a, T1 b)
	{ ost << '{'; if(a != b) { ost << *a; while(++a != b) ost << ", " << *a; } return ost << '}'; }

vector<string> _split(const string &s, char c) {
	int br = 0;
	vector<string> v(1);
	REP(i, SZ(s)) {
		if(s[i] == '[' || s[i] == '(' || s[i] == '{'/* || s[i] == '<'*/) br++;
		else if(s[i] == ']' || s[i] == ')' || s[i] == '}'/* || s[i] == '>'*/) br--;
		if(s[i] == c && br == 0) v.PB("");
		else v.back().PB(s[i]);
  }
  return v;
}

template<class T1>
void _err(string del, vector<string>::iterator it, T1 a) {
	bool wb = (*it)[0] == ' ', we = (*it).back() == ' ';
	cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << endl;
	(void)del;
}
template<class T1, class... Args>
void _err(string del, vector<string>::iterator it, T1 a, Args... args) {
	bool wb = (*it)[0] == ' ', we = (*it).back() == ' ';
	cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << del;
	_err(del, ++it, args...);
}

/////////////////////////////////////////////////////////////////////

int main(int argc, char** argv) {
	(void) argc; (void) argv;
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	
	int k = 300000;
	vector<int> v(k);
	
	REP(i, n) {
		int a;
		cin >> a;
		v[a]++;
	}
	
	int mx = 0;
	FOR(i, 0, k - 2) {
		v[i + 1] += v[i] / 2;
		if(v[i])
			mx = i;
	}
	
	cout << mx << endl;
	
	return 0;
}
/*
*/