Cod sursa(job #202908)

Utilizator zombie_testertest test zombie_tester Data 12 august 2008 09:12:20
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
# include <stdio.h>
# include <algorithm>

using namespace std;

# define FIN "cutii.in"
# define FOUT "cutii.out"
# define MAXN 3502

struct trio
{
   int x,y,z;
};

int N,i,j,L,p,T;
int Best[MAXN];
int V[MAXN];
trio C[MAXN];

     int cmp(trio a, trio b)
     {
         return a.x<b.y;
     }
     
     int search(int st, int dr, int p)
     {
         int mij,poz;
         while (st <= dr)
           {
              mij = (st+dr) >> 1;
              if (C[V[mij]].x<C[p].x&&C[V[mij]].y<C[p].y&&C[V[mij]].z<C[p].z)
                {
                   poz = mij;
                   st = mij + 1;
                }
              else dr = mij - 1;
           }
         return poz;
     }

     int main()
     {
         freopen(FIN,"r",stdin);
         freopen(FOUT,"w",stdout);
         
         scanf("%d %d",&N,&T);
         
         for (j = 1; j <= T; ++j)
           {
              for (i = 1; i <= N; ++i)
                scanf("%d%d%d",&C[i].x,&C[i].y,&C[i].z);
         
              sort(C+1,C+N+1,cmp);
         
              Best[1] = 1;
              V[1] = 1;
              L = 1;
              for (i = 2; i <= N; ++i)
                {
                  p = search(0,L,i);
                  Best[i] = p + 1;
                  V[p+1] = i;
                  if (p+1 > L) L = p+1; 
                }
         
              p = 0;
              for (i = 1; i <= N; ++i)
                if (Best[i]>p) p = Best[i];
           
              printf("%d\n",p);
           }
         
         return 0;
     }