Cod sursa(job #604167)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 20 iulie 2011 17:57:49
Problema Cutii Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.94 kb
Program cutii;
 type dimens=record
              x,y,z:integer;
              end;
 var n,t,i,j,max,p,m,s,q:integer;
     a: array [1..3500] of dimens;
     b: array [1..3500] of integer;
     b1,b2:array [1..1 shl 17] of char;
     fi, fo:text;
 procedure qsort(l,r:integer);
  var i,j,k:integer;
      t:dimens;
  begin
   i:=l; j:=r;
   k:=a[(l+r) div 2].z;
    repeat
     while a[i].z>k do inc(i);
     While a[j].z<k do dec(j);
      if i<=j then begin
                  t:=a[i];
                  a[i]:=a[j];
                   a[j]:=t;
                   end;
      inc(i); dec(j);
    until i>=j;
  if j>l then qsort(l,j);
  if i<r then qsort(i,r);
 end;
begin
assign(fi,'cutii.in');
 assign(fo,'cutii.out');
settextbuf(fi,b1);
 settextbuf(fo,b2);
reset(fi);
rewrite(fo);
 readln(fi,n,t);
  for m:=1 to t do begin
     q:=0;
               for i:=1 to n do begin
                      read(fi,s); a[s].x:=s;
                      if s>q then q:=s;
                readln(fi,a[s].y,a[s].z);
                end;
              { qsort(1,n);}
               b[q]:=1; max:=0;
                for i:=q-1 downto 1 do begin
                                     p:=i;
                                     for j:=i+1 to n do
                if (a[j].y>a[i].y) and (a[j].z>a[i].z) and (b[j]>b[p])
                                   then p:=j;
                                     b[i]:=b[p]+1;
                                     if b[i]>max then max:=b[i];
                                     end;

               { for i:=1 to n do
                 if b[i]>max then max:=b[i];}
                  writeln(fo,max);
                for i:=1 to q-1 do begin
                                    b[i]:=0;
                                    a[i].x:=0;
                                    a[i].y:=0;
                                    a[i].z:=0;
                                    end;
                 end;
  close(fo);
end.