Pagini recente »
un_concurs_pt_oricine
|
Cod sursă (job #377085)
|
Profil Oana_Patricia
|
Diferențe pentru runda/oji-2023-antrenament-ffa între reviziile 49 și 48
|
Cod sursă (job #178454)
Cod sursă (job
#178454)
#include<fstream>
using namespace std;
#define MAX_N 2000
#define MAX_VALUE 30000
#define max(X, Y) (((X) > (Y)) ? (X) : (Y))
#define NIL -1
ifstream f("s2c.in");
ofstream g("s2c.out");
short a[MAX_N],n;
short d[MAX_N][MAX_N];
int next[MAX_N];
int start[MAX_VALUE+1];
void normalize()
{
for (int i=0;i<=MAX_VALUE;i++)
start[i]=NIL;
for(int i=0;i<n;i++)
{
next[i]=start[a[i]];
start[a[i]]=i;
}
int x=0;
for(int i=0;i<=MAX_VALUE;i++)
for(int pos=start[i];pos!=NIL;pos=next[pos])
a[pos]=x++;
}
int main()
{
int numTests;
f>>numTests;
while(numTests--)
{
f>>n;
for(int i=0;i<n;i++)
f>>a[i];
normalize();
for(int j=0;j<n;j++)
d[0][j]=1;
int longest=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<n;j++)
d[i][j]=1;
for(int k=0;k<i;k++)
d[i][a[k]]=1+d[k][a[i]];
for(int j=1;j<n;j++)
d[i][j]=max(d[i][j],d[i][j-1]);
longest=max(longest,d[i][n-1]);
}
g<<longest<<"\n";
}
return 0;
}