Cod sursa(job #1361293)

Utilizator trinc2014Trinc Adrian trinc2014 Data 25 februarie 2015 20:36:22
Problema Subsir crescator maximal Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.37 kb
program tab1_infoarena;
var n,maxim,k,nr,i,j,poz,psup,u:integer;
best,p:array [0..103] of longint;
v:array [0..103] of longint;
l:array [0..103] of longint;
m:longint;
f,g:text;
procedure afis(i:integer);
begin
  if (p[i]>0) then afis(p[i]);
  write(g,v[i],' ');
end;
function caut(x:longint):integer;
begin
  psup:=0;
  u:=nr;
  m:=(psup+u) div 2;
  while psup<=u do
    begin
      if (v[l[m]]<x) and (v[l[m+1]]>=x) then
        begin
          nr:=m;
          break;
        end
        else
          begin
            if (v[l[m+1]]<x) then
              begin
                psup:=m+1;
                m:=(psup+u) div 2;
              end
            else
              begin
                u:=m-1;
                m:=(psup+u) div 2;
              end;
        end;
    end;
  caut:=nr;
end;
begin
  assign(f,'scmax.in');
  reset(f);
  assign(g,'scmax.out');
  rewrite(g);
  readln(f,n);
  nr:=1;
  for i:=1 to n do
    read(f,v[i]);
  best[1]:=1;
  l[1]:=1;
  l[0]:=0;
  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(g,maxim);
  afis(poz);
  close(f);
  close(g);
end.