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<stdio.h>
#include<vector>
#include<deque>
#include<algorithm>

int main() {
    int count;
    scanf("%d", &count);

    std::vector<int> v;
    v.reserve(count);
    int a;
    while (count--) {
        scanf("%d", &a);
        v.push_back(a);
    }
    std::sort(begin(v), end(v));
    std::deque<int> d;
    for (const auto& e : v) {
        while (!d.empty() && d.back() < e) d.pop_back();

        d.push_back(e);
    
        while (d.size() > 1 && d.back() == d[d.size() - 2]) {
            int last = d.back();
            d.pop_back();
            d.pop_back();
            d.push_back(last + 1);
        }
//        for (const auto & e : d) {
//            printf("%d ", e);
//        }
//        printf("\n");
    }
    printf("%d", d.front());
    return 0;
}