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

#ifdef LOCAL
    #define dbg(...) fprintf(stderr, __VA_ARGS__)
#else
    #define dbg(...)
#endif

using namespace std;

vector<int> naszyjnik;

int main() {
    int n;
    int maxval = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int x;
        scanf("%d", &x);
        if (x > maxval) {
            maxval = x;
        }
        naszyjnik.push_back(x);
    }
    for (int i = 0; i < n; i++) {
        naszyjnik.push_back(naszyjnik[i]);
    }
    int mxidx = 0;
    for (int i = naszyjnik.size()-1; i >= 0; --i) {
        if (naszyjnik[i] == maxval) {
            mxidx = i;
            break;
        }
    }

    int maxres = 1;
    int curres = 1;
    vector<int> current_koralikis;

    current_koralikis.push_back(maxval);
    for (int i = mxidx - 1; i >= 0; --i) {
        while (naszyjnik[i] > current_koralikis[curres - 1]) {
            current_koralikis.pop_back();
            curres --;
        }
        if (naszyjnik[i] != current_koralikis[curres - 1]) {
            current_koralikis.push_back(naszyjnik[i]);
            curres ++;
        }
        for (int j = 0; j < current_koralikis.size(); ++j) {
            dbg("%d ", current_koralikis[j]);
        }
        dbg("\n");
        if (curres > maxres) {
            maxres = curres;
        }
    }

    printf("%d\n", maxres);
    return 0;
}