Cod sursa(job #846055)

Utilizator OpportunityVlad Negura Opportunity Data 1 ianuarie 2013 13:07:47
Problema Subsir crescator maximal Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.92 kb
const inf=2000000001;
var fi,fo:text;
    m,i,n:longint;
    a,q,p:array[1..1000000]of longint;

procedure readData;
 begin
  readln(fi,n);
  for i:=1 to n do read(fi,a[i]);
 end;

function insert(k,l,r:longint):longint;
var mid:longint;
 begin
  mid:=(l+r) div 2;
  if l=r then
   begin
    if l>m then begin inc(m); q[m+1]:=inf end; q[l]:=k; insert:=l;
   end
  else
   if k>q[mid] then insert:=insert(k,mid+1,r) else insert:=insert(k,l,mid);
 end;

procedure buildPQ;
 begin
  q[1]:=inf;
  for i:=1 to n do
   p[i]:=insert(a[i],1,m+1);
 end;

procedure writeData(k:longint);
 begin
  if p[k]=m then
   begin
    dec(m);
    if k>1 then writeData(k-1);
    write(fo,a[k],' ');
   end
  else
   if k>1 then writeData(k-1);
 end;

BEGIN
 assign(fi,'scmax.in'); reset(fi); assign(fo,'scmax.out'); rewrite(fo);

  readData;
  buildPQ;
  writeln(fo,m);
  writeData(n);

 close(fi); close(fo);
END.