Cod sursa(job #65238)

Utilizator ProtomanAndrei Purice Protoman Data 7 iunie 2007 20:19:58
Problema Cutii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.23 kb
var f1,f2:text;
    n,t,i,j,k,max,aux:longint;
    x,y,z,v:array[1..4000] of longint;
    a:array[1..4000] of int64;

procedure pozitie(var m:longint; p,u:longint);
var i,j,di,dj,aux:longint;
begin
        di:=0;
        dj:=-1;
        i:=p;
        j:=u;
        while i<j do
        begin
                if a[i]>a[j] then
                begin
                        aux:=di;
                        di:=-dj;
                        dj:=-aux;
                        aux:=a[i];
                        a[i]:=a[j];
                        a[j]:=aux;
                end;
                i:=i+di;
                j:=j+dj;
        end;
        m:=i;
end;

procedure quick(p,u:longint);
var m:longint;
begin
        if p<u then
        begin
                pozitie(m,p,u);
                quick(p,m-1);
                quick(m+1,u);
        end;
end;

begin
        assign(f1,'cutii.in');
        reset(f1);
        assign(f2,'cutii.out');
        rewrite(f2);
        read(f1,n,t);
        for k:=1 to t do
        begin
                for i:=1 to n do
                begin
                        read(f1,x[i],y[i],z[i]);
                        a[i]:=x[i]*100000000+y[i]*10000+z[i];
                end;
                quick(1,n);
                for i:=n downto 1 do
                begin
                        max:=0;
                        for j:=i+1 to n do
                        begin
                                q:=a[i] div 100000000;
                                q1:=a[j] div 100000000;
                                w:=a[i] mod 100000000 div 10000;
                                w1:=a[j] mod 100000000 div 10000;
                                e:=a[i] mod 10000;
                                e1:=a[j] mod 10000;
                                if (q>q1)and(w>w1)and(e>e1)and(v[j]>max) then max:=v[j];
                        end;
                        v[i]:=max+1;
                end;
                max:=0;
                for i:=1 to n do
                begin
                        if max<v[i] then max:=v[i];
                        v[i]:=0;
                end;
                writeln(f2,max);
        end;
        close(f1);
        close(f2);
end.