#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
int m = 2*n;
vector<int> lan(m);
for(int i =0;i<n;i++){
cin >> lan[i];
}
for(int i =0;i<n;i++){
lan[i+n]=lan[i];
}
vector<int> nxt(m,-1);
vector<int> st;
for(int i=m-1;i>=0;i--){
while(!st.empty()&& lan[st.back()]<=lan[i])st.pop_back();
if(!st.empty())nxt[i]=st.back();
st.push_back(i);
}
int lg=1;
while((1<<lg)<=n)lg++;
vector<vector<int>> jp(lg,vector<int>(m,-1));
jp[0]=nxt;
for(int k=1;k<lg;k++){
for(int i =0;i<m;i++){
int v = jp[k-1][i];
if(v!=-1)jp[k][i]=jp[k-1][v];
}
}
int odp=1;
for(int s=0;s<n;s++){
int gra = s+n;
int v=s;
int ile =1;
for(int k=lg-1;k>=0;--k){
int to =jp[k][v];
if(to!=-1 && to<gra){
ile+=(1<<k);
v=to;
}
}
odp=max(odp,ile);
}
cout << odp << '\n';
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 49 50 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int m = 2*n; vector<int> lan(m); for(int i =0;i<n;i++){ cin >> lan[i]; } for(int i =0;i<n;i++){ lan[i+n]=lan[i]; } vector<int> nxt(m,-1); vector<int> st; for(int i=m-1;i>=0;i--){ while(!st.empty()&& lan[st.back()]<=lan[i])st.pop_back(); if(!st.empty())nxt[i]=st.back(); st.push_back(i); } int lg=1; while((1<<lg)<=n)lg++; vector<vector<int>> jp(lg,vector<int>(m,-1)); jp[0]=nxt; for(int k=1;k<lg;k++){ for(int i =0;i<m;i++){ int v = jp[k-1][i]; if(v!=-1)jp[k][i]=jp[k-1][v]; } } int odp=1; for(int s=0;s<n;s++){ int gra = s+n; int v=s; int ile =1; for(int k=lg-1;k>=0;--k){ int to =jp[k][v]; if(to!=-1 && to<gra){ ile+=(1<<k); v=to; } } odp=max(odp,ile); } cout << odp << '\n'; return 0; } |
English