Bài tập: Cho dãy số nguyên dương a1, a2,…an.
Dãy số ai, ai+1,…aj thoả mãn ai≤ ai+1≤ …≤aj với 1 ≤ i ≤ j≤n
được gọi là dãy con không giảm của dãy số đã cho.
Yêu cầu: Trong số các dãy con không giảm của dãy số đã cho mà các phần tử của nó đều thuộc dãy số {uk} xác định bởi u1=1, un = un-1+k, hãy tìm dãy con có độ dài lớn nhất.
const max=10000;
var
A:array[1..max] of longint;
D:array[0..max] of integer;
n,M:integer;
f: text;
procedure nhap;
var i : integer;
begin
assign(f,'MAXSEQ.INP');
reset(f);
readln(f,n);
for i := 1 to n do readln(f,a[i]);
close(f);
fillchar(d,sizeof(d),0);
end;
function chon(s : integer) : boolean;
var x : longint;
begin
s:=2*s;
x:= trunc(sqrt(s));
chon:= sqr(x)+x = s;
end;
procedure tinh;
var i : integer;
begin
if chon(a[1]) then
d[1]:=1
else
d[1]:=0;
m:=d[1];
for i:= 2 to n do
if chon(a[i]) then begin
if a[i]>=a[i-1] then
d[i]:=d[i-1]+1
else
d[i]:=1;
if d[i]>m then m:=d[i];
end
else
d[i]:=0;
end;
procedure xuat;
begin
assign(f,'MAXSEQ.OUT');
rewrite(f);
write(f,M);
close(f);
end;
BEGIN
clrscr;
Nhap;
tinh;
xuat;
Bookmarks