简单DP
f[i][j]表示从j开始合并到i这个数字序列的末尾的下标是什么。
参考代码
#include<bits/stdc++.h>
using namespace std;
#define N 300000
int n,a;
int f[60][N];
int ans=-0x3f;
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&a);
f[a][i]=i+1;
}
for(int i=2; i<=58; i++) {
for(int j=1; j<=n; j++) {
if(!f[i][j]) f[i][j]=f[i-1][f[i-1][j]];
if(f[i][j]) ans=i;
}
}
printf("%d\n",ans);
return 0;
}