首先考虑暴力dfs:每次确定一个起点后不断搜索最近的下一个值的位置。提交后发现T了,然后想到如果一个起点的长度很大,并且这个值在前面出现了好多次,那么复杂的很大,几乎是n^2,所以考虑如果有多个相同的数,一定是选最前面那个作为起点最优,所以用map记录一下每个值作为起点的最长长度,类似记忆搜。 int n; int a[maxn]; int ans=1; vector <int> G[maxn]; map <int,int> mp; void dfs(int s1,int pos,int len){ ans=max(ans,len); mp[s1]=len; len++...