#include <bits/stdc++.h>
using namespace std;
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n;
cin>>n;
vector<int> nums(2*n),next(2*n),ans(2*n);
int maks_id =0;
for (int i=0;i<n;i++) {
cin>>nums[i];
maks_id = (nums[maks_id] <= nums[i]) ? i : maks_id;
}
for (int i=0;i<n;i++) {
nums[i+n]=nums[i];
}
for (int i=2*n-1;i>=0;i--) {
if (i==2*n-1) next[i] = INT_MAX;
else {
if (nums[i]<nums[i+1]) next[i] = i+1;
else {
int j=i+1;
while (j<2*n and nums[j]<=nums[i]) j = next[j];
next[i] = j;
}
}
}
int wynik = 0;
for (int i=2*n-1;i>=0;i--) {
if (nums[i] == nums[maks_id] || next[i]==INT_MAX) ans[i] = 1;
else {
ans[i] = ans[next[i]] + 1;
}
if (i<n) {
wynik = max(wynik, ans[i]);
}
}
cout<<wynik;
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 | #include <bits/stdc++.h> using namespace std; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n; cin>>n; vector<int> nums(2*n),next(2*n),ans(2*n); int maks_id =0; for (int i=0;i<n;i++) { cin>>nums[i]; maks_id = (nums[maks_id] <= nums[i]) ? i : maks_id; } for (int i=0;i<n;i++) { nums[i+n]=nums[i]; } for (int i=2*n-1;i>=0;i--) { if (i==2*n-1) next[i] = INT_MAX; else { if (nums[i]<nums[i+1]) next[i] = i+1; else { int j=i+1; while (j<2*n and nums[j]<=nums[i]) j = next[j]; next[i] = j; } } } int wynik = 0; for (int i=2*n-1;i>=0;i--) { if (nums[i] == nums[maks_id] || next[i]==INT_MAX) ans[i] = 1; else { ans[i] = ans[next[i]] + 1; } if (i<n) { wynik = max(wynik, ans[i]); } } cout<<wynik; return 0; } |
English