Cod sursa(job #1168776)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 9 aprilie 2014 15:51:12
Problema Cutii Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.35 kb
program cutii;
 var a:array[1..35000,1..3] of longint;
     b:array[1..35000] of longint;
     n,i,j,x,y,z,best,max,k,t:longint;
     buf:array[1..1 shl 16] of char;
 procedure swap(i,j:longint);
  var aux:longint;
 begin
   aux:=a[i,1];
   a[i,1]:=a[j,1];
   a[j,1]:=aux;
   aux:=a[i,2];
   a[i,2]:=a[j,2];
   a[j,2]:=aux;
   aux:=a[i,3];
   a[i,3]:=a[j,3];
   a[j,3]:=aux;
 end;

 function int(i,j:longint):boolean;
   begin
     int:=(a[i,1]<a[j,1]) and (a[i,2]<a[j,2]) and (a[i,3]<a[j,3]);
   end;


 begin

  assign(input,'cutii.in');
  assign(output,'cutii.out');
  reset(input);
  rewrite(output);
  settextbuf(input,buf);
  readln(n,t);
  for k:=1 to t do
   begin
     for i:=1 to n do
       readln(a[i,1],a[i,2],a[i,3]);
     for i:=1 to n-1 do
      for j:=i+1 to n do
        if a[i,1]>a[j,1] then swap(i,j)
        else if (a[i,1]=a[j,1])and(a[i,2]>a[j,2])
           then swap(i,j)
           else if (a[i,1]=a[j,1])and(a[i,2]=a[j,2])and(a[i,3]>a[j,3])
             then swap(i,j);
     best:=0;
     b[1]:=1;
     for i:=2 to n do
       begin
         max:=0;
         for j:=1 to i-1 do
           if (int(j,i)) then
             if b[j]>max then max:=b[j];
         b[i]:=max+1;
         if b[i]>best then best:=b[i];
       end;
     writeln(best);
   end;
  close(output);
 end.