1 #include <stdio.h> 2 #include <algorithm> 3 #include <cstring> 4 #include <cmath> 5 #include <queue> 6 #include <vector> 7 using namespace std; 8 const int maxn=3e5+10; 9 int n,ans; 10 int f[60][maxn]; 11 template <class T> void read(T&x) 12 { 13 x=0;char c=getchar();int f=0; 14 while(c<'0'||c>'9'){f|=(c=='-');c=getchar();} 15 while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar(); 16 x=f?-x:x; 17 } 18 int main() 19 { 20 read(n);int a; 21 for(int i=1;i<=n;i++){read(a);f[a][i]=i+1;} 22 for(int i=2;i<=58;i++) 23 for(int j=1;j<=n;j++) 24 { 25 if(!f[i][j])f[i][j]=f[i-1][f[i-1][j]]; 26 if(f[i][j])ans=max(i,ans); 27 } 28 printf("%d",ans); 29 return 0; 30 }