#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,w=0,i;
cin>>n;
vector<int>v(2*n);
for(i=0;i<n;++i){
cin>>v[i];
v[i+n]=v[i];
}
vector<int>ile2(2*n,1),wiekszy(2*n,-1);
stack<int>s;
for(i=2*n-1;i>=0;--i){
while(!s.empty()&&v[s.top()]<=v[i])s.pop();
if(!s.empty()&&s.top()<i+n)wiekszy[i]=s.top();
s.push(i);
}
for(i=2*n-1;i>=0;--i){
if(wiekszy[i]!=-1)ile2[i]=1+ile2[wiekszy[i]];
}
for(i=0;i<n;++i)w=max(w,ile2[i]);
cout<<w;
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 | #include<bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,w=0,i; cin>>n; vector<int>v(2*n); for(i=0;i<n;++i){ cin>>v[i]; v[i+n]=v[i]; } vector<int>ile2(2*n,1),wiekszy(2*n,-1); stack<int>s; for(i=2*n-1;i>=0;--i){ while(!s.empty()&&v[s.top()]<=v[i])s.pop(); if(!s.empty()&&s.top()<i+n)wiekszy[i]=s.top(); s.push(i); } for(i=2*n-1;i>=0;--i){ if(wiekszy[i]!=-1)ile2[i]=1+ile2[wiekszy[i]]; } for(i=0;i<n;++i)w=max(w,ile2[i]); cout<<w; return 0; } |
English