#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <cassert>
using namespace std;
#define LOG(...) fprintf(stderr, __VA_ARGS__)
#define FOR(i, n) for(int i = 0, __n = (n); i < __n; i++)
const int MAXN = 1000000;
int A[MAXN];
int main() {
int n;
scanf("%d", &n);
FOR(i, n) {
scanf("%d", &A[i]);
}
rotate(A, max_element(A, A + n) + 1, A + n);
vector<int> S;
S.push_back(A[n-1]);
int best = 1;
for (int i = n - 2; i >= 0; i--) {
// LOG("%d: %d\n", i, A[i]);
while(!S.empty() && S.back() <= A[i]) {
S.pop_back();
}
S.push_back(A[i]);
if (S.size() > best) best = S.size();
}
printf("%d\n", best);
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 | #include <algorithm> #include <iostream> #include <vector> #include <list> #include <cassert> using namespace std; #define LOG(...) fprintf(stderr, __VA_ARGS__) #define FOR(i, n) for(int i = 0, __n = (n); i < __n; i++) const int MAXN = 1000000; int A[MAXN]; int main() { int n; scanf("%d", &n); FOR(i, n) { scanf("%d", &A[i]); } rotate(A, max_element(A, A + n) + 1, A + n); vector<int> S; S.push_back(A[n-1]); int best = 1; for (int i = n - 2; i >= 0; i--) { // LOG("%d: %d\n", i, A[i]); while(!S.empty() && S.back() <= A[i]) { S.pop_back(); } S.push_back(A[i]); if (S.size() > best) best = S.size(); } printf("%d\n", best); return 0; } |
English