Pagini recente » Cod sursa (job #2325679) | Cod sursa (job #1442245) | Cod sursa (job #2719894) | Cod sursa (job #2820424) | Cod sursa (job #1387276)
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.