CodeForces - 255C
wwl loves sequences of numbers. Recently, he has discovered a new type of sequences which he called an almost arithmetical progression. A sequence is an almost arithmetical progression, if its elements can be represented as:
a1 = p, where p is some integer;
ai = ai - 1 + ( - 1)i + 1·q (i > 1), where q is some integer.
Right now wwl has a piece of paper with sequence b, consisting of n integers. Help wwl, find there the longest subsequence of integers that is an almost arithmetical progression.
Sequence s1, s2, …, sk is a subsequence of sequence b1, b2, …, bn, if there is such increasing sequence of indexes i1, i2, …, ik (1 ≤ i1 < i2 < … < ik ≤ n), that bij = sj. In other words, sequence s can be obtained from b by crossing out some elements.
Input
The first line contains integer n (1 ≤ n ≤ 4000). The next line contains n integers b1, b2, …, bn (1 ≤ bi ≤ 106).
Output
Print a single integer — the length of the required longest subsequence.
Example
Input
2
3 5
Output
2
Input
4
10 20 10 30
Output
3
Note (You Will Win)
In the first test the sequence actually is the suitable subsequence.
In the second test the following subsequence fits: 10, 20, 10.
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int dp[4010][4010];
int a[4010];
int main(){
int n;
scanf("%d",&n);
int aa=0;
int xx;
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
xx=0;
for (int j=0;j<i;j++){
dp[i][j]=dp[j][xx]+1;
if (a[j]==a[i]){
xx=j;
}
aa=max(aa,dp[i][j]);
}
}
printf("%d\n",aa);
return 0;
}