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
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int main() {
    unsigned int n;

    scanf("%u", &n);

    std::vector<unsigned int> elements;
    elements.reserve(n);

    unsigned int val;

    for (int i = 0; i < n; ++i) {
        scanf("%u", &val);
        elements.push_back(val);
    }

    std::sort(elements.begin(), elements.end());

    unsigned int exp = elements[0];
    unsigned int newExp;
    unsigned int counter = 1;

    for (int i = 1; i < n; ++i) {
        newExp = elements[i];
        if (exp != newExp) {
            while (exp != newExp) {
                ++exp;
                counter = counter / 2;
            }
        }

        ++counter;
    }

    while (counter > 1) {
        counter = counter / 2;
        ++exp;
    }

    printf("%u\n", exp);

    return 0;
}