#include <bits/stdc++.h>
using namespace std;
int main () {
ios_base::sync_with_stdio(0); cin.tie(0);
int n;
cin >> n;
vector<int> a(n);
for (auto& x: a) cin >> x;
vector<int> L(n, -1), v(2*n+1), stk;
for (int i = 0; i < 2*n; i++) {
while (!stk.empty() && a[stk.back()%n] < a[i%n]) stk.pop_back();
if (!stk.empty()) L[i%n] = stk.back()%n;
stk.emplace_back(i);
}
for (int i = 0; i < n; i++) {
if (L[i] < i) {
v[L[i]+1]++;
v[i+1]--;
}
else {
v[L[i]+1]++;
v[i+n+1]--;
}
}
partial_sum(v.begin(), v.end(), v.begin());
int ans = 0;
for (int i = 0; i < n; i++) ans = max(ans, v[i] + v[i+n]);
cout << ans << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; int main () { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> a(n); for (auto& x: a) cin >> x; vector<int> L(n, -1), v(2*n+1), stk; for (int i = 0; i < 2*n; i++) { while (!stk.empty() && a[stk.back()%n] < a[i%n]) stk.pop_back(); if (!stk.empty()) L[i%n] = stk.back()%n; stk.emplace_back(i); } for (int i = 0; i < n; i++) { if (L[i] < i) { v[L[i]+1]++; v[i+1]--; } else { v[L[i]+1]++; v[i+n+1]--; } } partial_sum(v.begin(), v.end(), v.begin()); int ans = 0; for (int i = 0; i < n; i++) ans = max(ans, v[i] + v[i+n]); cout << ans << '\n'; } |
English