Cod sursa(job #186620)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 28 aprilie 2008 14:34:43
Problema Subsir crescator maximal Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.09 kb
var  a,p,v,l:array[0..100001] of longint;
     i,j,n,pp,max,nr:longint;
function caut(x:longint):longint;
    var st,dr,m,w:longint;
    begin
      st:=0; dr:=nr; m:=(st+dr) div 2; w:=nr;
      while (st<=dr) do
            if (a[l[m]]<x)and(a[l[m+1]]>=x) then begin w:=m; st:=dr+1;end
              else if (a[l[m+1]]<x) then begin st:=m+1; m:=(st+dr) div 2; end
                   else begin dr:=m-1; m:=(st+dr) div 2;end;
       caut:=w;
    end;
procedure afisare(i:longint);
  begin
     if (p[i]>0) then afisare(p[i]);
     write(a[i],' ');
  end;
begin
assign(input,'scmax.in'); reset(input); assign(output,'scmax.out'); rewrite(output);
readln(n);
for i:=1 to n do read(a[i]);
v[n]:=1;l[1]:=1; l[0]:=0;
p[n]:=0;   nr:=1;
max:=1; pp:=n;
for i:=2 to n do
   begin
     pp:=caut(a[i]);
     p[i]:=l[pp];
     v[i]:=pp+1;
     l[pp+1]:=i;
     if (nr<pp+1) then nr:=pp+1;
   end;
   max:=0; pp:=0;
for i:=1 to n do
   if (max<v[i]) then begin
                        max:=v[i]; pp:=i;
                      end;
writeln(max);
afisare(pp);
close(input); close(output);
end.