Cod sursa(job #68982)

Utilizator vanila0406Ionescu Victor vanila0406 Data 30 iunie 2007 15:35:44
Problema Cutii Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.18 kb
program cutii;
type dim=record
        x,y,z:longint;
end;
var f,g:text;
        n,t,dh:longint;
        v:array[1..3501] of dim;



procedure iofile;
begin
        assign(f,'cutii.in');
        reset(f);
        assign(g,'cutii.out');
        rewrite(g);
        readln(f,n,t);
end;



procedure repair(i:longint);
var l,r,max:longint;
        aux:dim;
begin
        l:=i*2;
        r:=l+1;
        max:=i;
        if (l<=dh)and(v[i].x<v[l].x) then
                max:=l;
        if (r<=dh)and(v[max].x<v[r].x) then
                max:=r;
        if max<>i then
                begin
                        aux:=v[i];
                        v[i]:=v[max];
                        v[max]:=aux;
                        repair(max);
                end;
end;


procedure build_heap;
var i:longint;
begin
        for i:=n div 2 downto 1 do
                repair(i);
end;


procedure heapsort;
var i:longint;
        aux:dim;
begin
        build_heap;
        for i:=n downto 2 do
                begin
                        aux:=v[i];
                        v[i]:=v[1];
                        v[1]:=aux;
                        dh:=dh-1;
                        repair(1);
                end;
end;





procedure subsir;
var b:array[1..3501] of integer;
        i,j,max:longint;
begin
        b[1]:=1;
        for i:=2 to n do
                begin
                        b[i]:=1;
                        for j:=1 to i-1 do
                                if (v[j].y<v[i].y)and(v[j].z<v[i].z) then
                                if b[i]<b[j]+1 then
                                        b[i]:=b[j]+1;
                end;
        max:=b[1];
        for i:=2 to n do
                if b[i]>max then max:=b[i];
        writeln(g,max);
end;


procedure solve;
var i,j:longint;
begin
        for i:=1 to t do
                begin
                        for j:=1 to n do
                                readln(f,v[j].x,v[j].y,v[j].z);
                        dh:=n;
                        heapsort;
                        subsir;
                end;
        close(g);
end;



begin
        iofile;
        solve;
end.