#include "bits/stdc++.h"
using namespace std;
constexpr int INF = 1000000007;
int main() {
int n;
cin >> n;
vector <int> v(2 * n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
for (int i = n; i < 2 * n; i++) {
v[i] = v[i - n];
}
vector <int> dp(2 * n + 1, 0);
stack <pair <int, int>> s;
s.push({INF, 2 * n});
for (int i = 2 * n - 1; i >= 0; i--) {
while (s.top().first <= v[i]) s.pop();
dp[i] = 1 + dp[s.top().second];
s.push({v[i], i});
}
cout << *max_element(dp.begin(), dp.begin() + n) << '\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 | #include "bits/stdc++.h" using namespace std; constexpr int INF = 1000000007; int main() { int n; cin >> n; vector <int> v(2 * n); for (int i = 0; i < n; i++) { cin >> v[i]; } for (int i = n; i < 2 * n; i++) { v[i] = v[i - n]; } vector <int> dp(2 * n + 1, 0); stack <pair <int, int>> s; s.push({INF, 2 * n}); for (int i = 2 * n - 1; i >= 0; i--) { while (s.top().first <= v[i]) s.pop(); dp[i] = 1 + dp[s.top().second]; s.push({v[i], i}); } cout << *max_element(dp.begin(), dp.begin() + n) << '\n'; } |
English