#include <vector>
#include <iostream>
#include <deque>
int main() {
int n;
std::cin >> n;
std::vector<int> beads(2 * n);
for (int i = 0; i < n; i++)
{
std::cin >> beads[i];
beads[i + n] = beads[i];
}
std::vector<int> updates(2 * n, 0);
std::deque<std::pair<int,int>> dq;
for (int i = 0; i < 2 * n; i++)
{
if(!dq.empty() && dq.front().second <= i - n)
dq.pop_front();
while (!dq.empty() && dq.back().first < beads[i]) {
dq.pop_back();
}
int prev_best = i - n;
if (!dq.empty())
prev_best = dq.back().second;
if (prev_best + n < 2 * n)
updates[prev_best + n] += 1;
if (i + n < 2 * n)
updates[i + n] -= 1;
dq.push_back({beads[i], i});
}
std::vector<int> pref_sum(2*n + 1);
for (size_t i = 0; i < 2 * n; i++)
{
pref_sum[i + 1] = pref_sum[i] + updates[i];
}
int best = 0;
for (int i = n; i <= 2 * n; i++)
{
best = std::max(best, pref_sum[i]);
}
std::cout << best << '\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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <vector> #include <iostream> #include <deque> int main() { int n; std::cin >> n; std::vector<int> beads(2 * n); for (int i = 0; i < n; i++) { std::cin >> beads[i]; beads[i + n] = beads[i]; } std::vector<int> updates(2 * n, 0); std::deque<std::pair<int,int>> dq; for (int i = 0; i < 2 * n; i++) { if(!dq.empty() && dq.front().second <= i - n) dq.pop_front(); while (!dq.empty() && dq.back().first < beads[i]) { dq.pop_back(); } int prev_best = i - n; if (!dq.empty()) prev_best = dq.back().second; if (prev_best + n < 2 * n) updates[prev_best + n] += 1; if (i + n < 2 * n) updates[i + n] -= 1; dq.push_back({beads[i], i}); } std::vector<int> pref_sum(2*n + 1); for (size_t i = 0; i < 2 * n; i++) { pref_sum[i + 1] = pref_sum[i] + updates[i]; } int best = 0; for (int i = n; i <= 2 * n; i++) { best = std::max(best, pref_sum[i]); } std::cout << best << '\n'; } |
English