Cod sursa(job #127277)

Utilizator razvi9Jurca Razvan razvi9 Data 23 ianuarie 2008 18:29:37
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
#include<string.h>
int l[3501][3],n,i,j,t,m[3501];
int max;

int poz(int i,int j)
{int x=0,y=-1,aux;
 while(i<j)
 {if(l[i][0]>l[j][0])
   {aux=x;x=-y;y=-aux;
    aux=l[i][0];l[i][0]=l[j][0];l[j][0]=aux;
    aux=l[i][1];l[i][1]=l[j][1];l[j][1]=aux;
    aux=l[i][2];l[i][2]=l[j][2];l[j][2]=aux;}
  i=i+x;j=j+y;}
 return i;}

void sort(int i,int j)
{if(i>=j) return;
 int k=poz(i,j);
 sort(i,k-1);
 sort(k+1,j);}

void sol()
{for(;t;t--){
  for(i=1;i<=n;i++)  scanf("%d %d %d",&l[i][0],&l[i][1],&l[i][2]);
  sort(1,n);
  m[1]=1;
  max=1;
  for(i=2;i<=n;i++) {m[i]=1;
   for(j=1;j<i;j++)
    if(l[j][0]<l[i][0] && l[j][1]<l[i][1] && l[j][2]<l[i][2])
     if(m[j]+1>m[i]) m[i]=m[j]+1;
   if(m[i]>max) max=m[i];}
  printf("%d\n",max);}
}

int main()
{freopen("cutii.in","r",stdin);
 freopen("cutii.out","w",stdout);
 scanf("%d %d",&n,&t);
 sol();
 fclose(stdout);
 return 0;}