#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<int> V(n+1);
vector<int> V2(n+1);
int max_pos = 1;
for (int i=1; i<=n; i++) {
cin >> V[i];
if (V[i] > V[max_pos]) max_pos = i;
}
for (int i=1; i<=n; i++) {
V2[i] = V[(max_pos+i-2)%n+1];
}
vector<int> V3(n+3, 0);
vector<int> S;
S.reserve(n);
int ost_max = 1;
for (int i=2; i<=n; i++) {
if (V2[i] == V2[1]) ost_max = i;
}
V3[1]++;
V3[2]--;
if (ost_max+1 <= n) {
V3[ost_max+1]++;
V3[n+1]--;
}
S.push_back(1);
for (int i=2; i<=n; i++) {
while (!S.empty() && V2[S.back()] < V2[i]) {
S.pop_back();
}
V3[S.back()+1]++;
V3[i+1]--;
S.push_back(i);
}
int akt = 0, wyn = 0;
for (int i=1; i<=n; i++) {
akt += V3[i];
wyn = max(wyn, akt);
}
cout << wyn;
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> V(n+1); vector<int> V2(n+1); int max_pos = 1; for (int i=1; i<=n; i++) { cin >> V[i]; if (V[i] > V[max_pos]) max_pos = i; } for (int i=1; i<=n; i++) { V2[i] = V[(max_pos+i-2)%n+1]; } vector<int> V3(n+3, 0); vector<int> S; S.reserve(n); int ost_max = 1; for (int i=2; i<=n; i++) { if (V2[i] == V2[1]) ost_max = i; } V3[1]++; V3[2]--; if (ost_max+1 <= n) { V3[ost_max+1]++; V3[n+1]--; } S.push_back(1); for (int i=2; i<=n; i++) { while (!S.empty() && V2[S.back()] < V2[i]) { S.pop_back(); } V3[S.back()+1]++; V3[i+1]--; S.push_back(i); } int akt = 0, wyn = 0; for (int i=1; i<=n; i++) { akt += V3[i]; wyn = max(wyn, akt); } cout << wyn; return 0; } |
English