Cod sursa(job #267301)

Utilizator DanielGGlodeanu Ioan Daniel DanielG Data 27 februarie 2009 00:00:16
Problema Subsir crescator maximal Scor 20
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
var p,l,v,best:array[0..100005] of integer; {+ 0}
maxim,k,nr,i,j,poz,n:longint;
f:text;
function caut(x:integer):integer;
var u,p,m:longint;
begin
p:=0; u:=nr; m:=(p+u) div 2;
while p<=u do
      begin
        if (v[l[m]]<x) and (v[l[m+1]]>=x) then
                       begin
                         nr:=m;
                         break;
                       end
            else if v[l[m+1]]<x then
                    begin
                      p:=m+1;
                      m:=(p+u) div 2;
                    end
               else
                   begin
                     u:=m-1;
                     m:=(u+p) div 2;
                     end;
      end;
caut:=nr;
end;
procedure afis(i:integer);
begin
if p[i]>0 then afis(p[i]);
write(f,v[i],' ');
end;
begin
assign(f,'scmax.in');reset(f);
read(f,n);
for i:=1 to n do
    read(f,v[i]);
close(f);
assign(f,'scmax.out');rewrite(f);
nr:=1;
best[1]:=1; l[0]:=0; l[1]:=1;
for i:=2 to n do
    begin
      poz:=caut(v[i]);
      p[i]:=l[poz];
      best[i]:=poz+1;
      l[poz+1]:=i;
      if nr<poz+1 then nr:=poz+1;
    end;
maxim:=0; poz:=0;
for i:=1 to n do
    if maxim<best[i] then
       begin
         maxim:=best[i];
         poz:=i;
       end;
writeln(f,maxim);
afis(poz);
close(f);
end.