lg3147 发表于 2018-05-05 | 分类于 题解 | 阅读数 次 链接:lg3147 题解 dp[i][j] 表示第i个位置合成到j所需的长度 123456789101112131415161718192021222324252627282930313233343536#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<map>#include<algorithm>#define rint register int#define rep(i,x,y) for(rint i=x;i<=y;++i)#define repd(i,x,y) for(rint i=x;i>=y;--i)#define lowbit(x) (x&(-x))#define ll long longusing namespace std;const int N=1e6;int dp[N][70],a[N],n,ans;template <typename T>inline void read(T &x){ x=0;char c;int sign=1; do{c=getchar();if(c=='-')sign=-1;}while(c<'0'||c>'9'); do{x=x*10+c-'0'; c=getchar();}while(c>='0'&&c<='9'); x*=sign;}int main(){ read(n); rep(i,1,n)read(a[i]); rep(i,1,n){ dp[i][a[i]]=1; int j=i-1; while(dp[j][a[i]]){ j-=dp[j][a[i]]; a[i]++;dp[i][a[i]]=i-j; } ans=max(ans,a[i]); } cout<<ans<<endl; return 0;}