Cod sursă (job #178454)

Utilizator avatar ionut98 Bejenariu Ionut Daniel ionut98 IP ascuns
Problemă S2C Compilator cpp | 1,14 kb
Rundă Arhiva de probleme Status evaluat
Dată 7 ian. 2016 12:16:37 Scor 0
#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;
}