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

int main() {
    int n;
    std::cin >> n;

    std::vector<int> pos(n);
    for (int i = 0; i < n; ++i) {
        int a_i;
        std::cin >> a_i;
        pos[a_i - 1] = i;
    }

    int min_needed = pos[n - 1];
    int max_needed = pos[n - 1];
    long long poss = 1;
    for (int i = 2; i <= n; ++i) {
        if (i % 2 == 0) {
            int add = pos[n - i / 2 - 1];
            if (add < min_needed) {
                min_needed = add;
            } else if (add > max_needed) {
                max_needed = add;
            }
        }
        int min_poss = max_needed - i + 1;
        if (min_poss < 0) {
            min_poss = 0;
        }
        if (min_needed > n - i) {
            min_needed = n - i;
        }
        if (min_poss <= min_needed) {
            poss += min_needed - min_poss + 1;
        }
    }
    std::cout << 2 * n + 1 << " " << poss << "\n";
}