Pagini recente » Cod sursa (job #487333) | Cod sursa (job #3146680) | Cod sursa (job #2737976) | Cod sursa (job #1545567) | Cod sursa (job #1571307)
var i,j,n,k,m:longint;
a,b,c,d:array[0..100000] of longint;
procedure caut(k,st,dr:longint);
var j:longint;
begin
if st=dr then begin
b[st]:=a[k];
c[k]:=st;
end else begin
j:=(st+dr) div 2;
if b[j]<a[k] then caut(k,j+1,dr)
else caut(k,st,j);
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]:=a[1];
c[1]:=1;
k:=1;
// m:=1;
for i:=2 to n do begin
// b[i]:=1;
// for j:=1 to i-1 do begin
// if (a[j]<a[i]) and (b[i]<=b[j]) then begin
// b[i]:=b[j]+1;
// c[i]:=j;
// end;
// end;
if a[i]>b[k] then begin
inc(k);
b[k]:=a[i];
c[i]:=k;
end else
caut(i,1,k);
// if b[i]>k then begin
// k:=b[i];
// m:=i;
// end;
end;
// for i:=1 to k do write(b[i],' ');
// writeln;
// for i:=1 to n do write(c[i],' ');
// writeln;
m:=k;
for i:=n downto 1 do begin
// write(m, ' ' );
// b[k-i+1]:=a[m];
// m:=c[m];
if k=m then begin
d[k]:=a[i];
dec(k)
end;
if (c[i]=k) and (d[k+1]>a[i]) then begin
d[k]:=a[i];
dec(k);
end;
end;
writeln(m);
for i:=1 to m do write(d[i], ' ');
end.