#include <cstdio>
#include <deque>
int necklace[2 * 1000 * 1000];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
necklace[i] = x;
necklace[n + i] = x;
}
std::deque<std::pair<int, int>> subnecklace;
int best = 0;
for (int i = 2 * n - 1; i >= 0; i--) {
while (!subnecklace.empty() && necklace[i] >= subnecklace.front().first) {
subnecklace.pop_front();
}
subnecklace.push_front({necklace[i], i});
if (subnecklace.back().second >= i + n) {
subnecklace.pop_back();
}
// fprintf(stderr, "Current beauty beads:");
// for (auto [height, pos] : subnecklace) {
// fprintf(stderr, " {%d, %d}", height, pos);
// }
// fprintf(stderr, "\n");
if (best < (int)subnecklace.size()) {
// fprintf(stderr, " Improved!\n");
best = (int)subnecklace.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 39 40 41 42 43 44 45 | #include <cstdio> #include <deque> int necklace[2 * 1000 * 1000]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { int x; scanf("%d", &x); necklace[i] = x; necklace[n + i] = x; } std::deque<std::pair<int, int>> subnecklace; int best = 0; for (int i = 2 * n - 1; i >= 0; i--) { while (!subnecklace.empty() && necklace[i] >= subnecklace.front().first) { subnecklace.pop_front(); } subnecklace.push_front({necklace[i], i}); if (subnecklace.back().second >= i + n) { subnecklace.pop_back(); } // fprintf(stderr, "Current beauty beads:"); // for (auto [height, pos] : subnecklace) { // fprintf(stderr, " {%d, %d}", height, pos); // } // fprintf(stderr, "\n"); if (best < (int)subnecklace.size()) { // fprintf(stderr, " Improved!\n"); best = (int)subnecklace.size(); } } printf("%d\n", best); return 0; } |
English