Nguồn đề bài http://vn.spoj.com/problems/LIS/
Đề bài LIS Spoj
Tìm dãy con tăng dài nhất, số lượng phần tử tối đa 30000. In ra số lương lớn nhất có thể
Input:
5
2 1 4 3 5
Output:
3
Link nộp bài:
http://vn.spoj.com/problems/LIS/
Code Lis spoj Pascal
const fi= '';
fo= '';
maxd= 30001;
var a: array[0..maxd] of longint;
l: array[0..maxd] of integer;
n: longint;
d: longint;
procedure mofile;
var i,j:integer;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
end;
procedure dongfile;
begin
close(input);close(output);
end;
procedure nhap;
var i:longint;
f:text;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]); close(f);
end;
procedure xuli;
var i,k,dau,cuoi:longint;
begin
l[1]:=1;d:=1;
for i:=2 to n do
begin
if a[i]>a[l[d]] then
begin
inc(d);
l[d]:=i;
end
else
begin
dau:=1;
cuoi:=d;
while dau<cuoi do
begin
k:=(dau+cuoi) div 2;
if a[l[k]]<a[i] then
dau:=k+1
else
cuoi:=k;
end;
l[dau]:=i;
end;
end;
end;
procedure xuat;
begin
write(d);
end;
begin
nhap;
xuli;
xuat;
end.
Có thuật nào chạy đc tới 10^5 không đại ca ?
ko có :/
không có gì em?
anh oi cho em hoi vi sao mid = (d+c+1) div 2 ,chu khong phai la (d+c) div 2