Cod sursa(job #62733)

Utilizator cezar305Mr. Noname cezar305 Data 23 mai 2007 21:50:06
Problema Subsir 2 Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.91 kb
var f1,f2:text;
    n,i,ind,poz,min,j,h,scm,ming:longint;
    a,v,e,x,y:array[1..5000] of longint;
    ok:boolean;

procedure comp(p,q:longint);
begin
        while p=q do
        begin
                p:=x[p];
                q:=x[q];
        end;
        if (q>p)and(p<>0) then ok:=true;
end;

begin
        assign(f1,'subsir2.in');
        reset(f1);
        assign(f2,'subsir2.out');
        rewrite(f2);
        read(f1,n);
        for i:=1 to n do
                read(f1,a[i]);
        for i:=n downto 1 do
        begin
                min:=maxlongint;
                ming:=maxlongint;
                for j:=i+1 to n do
                        if a[i]<=a[j] then
                        begin
                                e[j]:=1;
                                if ((v[j]<min)and(a[j]<ming))or((v[j]=min)and(a[j]<ming)) then
                                begin
                                        min:=v[j];
                                        x[i]:=j;
                                end;
                                if a[j]<ming then ming:=a[j];
                        end;
                if min=maxlongint then min:=0;
                v[i]:=min+1;
                for j:=i+1 to n do
                        if (v[j]=v[i])and(a[j]<a[i])and(e[j]=0) then e[i]:=1;
        end;
        min:=maxlongint;
        for i:=1 to n do
        begin
                if (e[i]=0) and (v[i]<min) then
                begin
                        scm:=i;
                        min:=v[i];
                end;

        end;
        writeln(f2,min);
        {for i:=2 to h do
        begin
                ok:=false;
                comp(scm,i);
                if ok=true then scm:=i;
        end;        }
        while scm<>0 do
        begin
                write(f2,scm,' ');
                scm:=x[scm];
        end;
        close(f1);
        close(f2);
end.