LIQ - Dãy con tăng dài nhất ( bản dễ )
Tác giả: ladpro98
Ngôn ngữ: Pascal
program daycontang;
const fi = '';
fo = '';
var mang,f: array[0..30001] of longint;
i,t,n:longint;
inp,oup:text;
function find(i,j,x:longint):longint;
var l,r,m,k:longint;
begin
l:=i;r:=j;
while l<=r do
begin
m:=(l+r) div 2;
if mang[f[m]]<mang[x] then
begin
k:=m;
l:=m+1;
end
else r:=m-1;
end;
exit(k);
end;
procedure input;
begin
assign(inp,fi);
reset(inp);
readln(inp,n);
for i:=1 to n do read(inp,mang[i]);
close(inp);
end;
procedure output;
begin
assign(oup,fo);
rewrite(oup);
write(oup,t);
close(oup);
end;
begin
input;
f[1]:=1;
t:=1;
for i:=2 to n do
begin
if mang[i]<mang[f[1]] then f[1]:=i
else if mang[i]>mang[f[t]] then
begin
inc(t);
f[t]:=i;
end
else
begin
f[find(1,t,i)+1]:=i;
end;
end;
output;
end.