Cod sursa(job #1654228)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 16 martie 2016 21:48:24
Problema Subsir crescator maximal Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.44 kb
{$H+}

var lung,poz,sir:array[1..100005] of longint;
    i,j,n,m,prim,k,co,oo:longint;
    bufin:array[1..65000] of byte;
    p,c:string;

procedure calc();
var i,j:longint;
begin
     for i:=n downto 1 do
     begin
         lung[i]:=1; poz[i]:=0;
         for j:=i+1 to n do
             if ((sir[i]<sir[j]) and (lung[i]<lung[j]+1)) then
             begin
                 lung[i]:=lung[j]+1;
                 poz[i]:=j;
             end;
     if m<lung[i] then
     begin
         m:=lung[i];
         prim:=i;
     end;
     end;

end;


begin
    assign(input,'scmax.in'); reset(input);
    settextbuf(input,bufin);
    readln(input,n);
    setlength(p,100005);
  //  for i:=1 to n do read(input,sir[i]);
    read(input,p);
    p:=p+' ';
    i:=1; oo:=1;
    c:='';
    while p<>'' do
    begin
        while (p[i]<>' ')  do begin c:=c+p[i]; inc(i); end;
       // inc(i);
        delete(p,1,i);
        i:=1;
        val(c,sir[oo],co); inc(oo);
        c:='';
    end;

    m:=0;
    calc;
    assign(output,'scmax.out'); rewrite(output);
    writeln(output,m);
   // for i:=1 to n do write(poz[i],' ');
   // writeln;
    i:=prim;
    k:=1;
    write(output,sir[prim],' ');
    while k<m do
    begin
       if poz[i]<>0 then i:=poz[i];
       write(output,sir[i],' ');
       inc(k);
    end;
   //for i:=1 to n do if poz[i]<>0 then write(sir[poz[i]],' ');
    close(input); close(output);
end.