Cod sursa(job #1387276)

Utilizator laura.calimanLaura Caliman laura.caliman Data 13 martie 2015 22:07:12
Problema Subsir crescator maximal Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.04 kb
var n,m,i,j,k:longint;
    a,b,c:array[1..100000] of longint;
    
function cautbin(k,i,j:longint):longint;
var m:longint;
begin
  m:=(i+j) div 2;
  if i<j then begin 
    if c[m]<k then 
      cautbin:=cautbin(k,m+1,j)
    else cautbin:=cautbin(k,i,m)
  end else begin
    if c[m]<k then cautbin:=m+1 
    else cautbin:=i;
  end;
end;
    
begin
  assign(input,'scmax.in');
  assign(output,'scmax.out');
  reset(input);
  rewrite(output);
  read(n);
  for i:=1 to n do read(a[i]);
  b[1]:=1;
  c[1]:=a[1];
  j:=1;
  for i:=2 to n do begin
    if c[j]<a[i] then begin
      inc(j);
      b[i]:=j;
      c[j]:=a[i];
    end else begin
      m:=cautbin(a[i],1,j);
      if m>j then j:=m;
      b[i]:=m;
      c[m]:=a[i];
    end;
//    writeln(m,' ',j);
  end;
//  for i:=1 to n do write(b[i],' ');
//  writeln;
//  for i:=1 to j do write(c[i],' ');
  writeln(j);
  k:=j;
  for i:=n downto 1 do begin
    if b[i]=j then begin
      c[j]:=a[i];
      dec(j);
    end;
  end;
  for i:=1 to k do
    write(c[i],' ');
end.