Pagini recente » Cod sursa (job #464785) | Cod sursa (job #1630105) | Cod sursa (job #2639997) | Cod sursa (job #2346094) | Cod sursa (job #267301)
Cod sursa(job #267301)
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.