#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n; cin >> n;
vector<int>a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
a.emplace_back(a[i]);
}
vector<int>L(2 * n, -1);
stack<int>s;
for (int i = 0; i < 2*n; i++) {
while ((int)s.size() && a[s.top()] < a[i]) s.pop();
if (s.size()) L[i] = s.top();
s.push(i);
}
// for (int i = n; i < 2 * n; i++){
// cerr << L[i] << " ";
// }
// cerr << "\n";
vector<int>pref(n + 1);
auto add = [&](int l, int r) {
pref[l]++;
pref[r + 1]--;
};
for (int i = 0; i < n; i++) {
if (L[i + n] == -1) {
continue;
}
int pos = L[i + n] % n;
if (pos < i) {
add(pos + 1, i);
} else {
add(pos + 1, n - 1);
add(0, i);
}
}
int ans = pref[0];
for (int i = 1; i < n; i++){
pref[i] += pref[i - 1];
ans = max(ans, pref[i]);
}
cout << ans << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
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 49 50 51 52 53 54 55 56 57 58 | #include <bits/stdc++.h> using namespace std; #define int long long void solve() { int n; cin >> n; vector<int>a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { a.emplace_back(a[i]); } vector<int>L(2 * n, -1); stack<int>s; for (int i = 0; i < 2*n; i++) { while ((int)s.size() && a[s.top()] < a[i]) s.pop(); if (s.size()) L[i] = s.top(); s.push(i); } // for (int i = n; i < 2 * n; i++){ // cerr << L[i] << " "; // } // cerr << "\n"; vector<int>pref(n + 1); auto add = [&](int l, int r) { pref[l]++; pref[r + 1]--; }; for (int i = 0; i < n; i++) { if (L[i + n] == -1) { continue; } int pos = L[i + n] % n; if (pos < i) { add(pos + 1, i); } else { add(pos + 1, n - 1); add(0, i); } } int ans = pref[0]; for (int i = 1; i < n; i++){ pref[i] += pref[i - 1]; ans = max(ans, pref[i]); } cout << ans << endl; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |
English