Наибольшая возрастающая подпоследовательность У вас есть массив чисел длиною "N". Нужно найти следующую длину наибольшей возрастающей подпоследовательности. Ниже приведены несколько примеров
[1,3,5,4,7] => 3
[2,2,2,2,2] => 1
Входные данные:
(1 ≤ n ≤ 10000), где каждый элемент в массиве в промежутке (-10000 ≤ a[i] ≤ 10000)
Выходные данные:
Нужно найти следующую длину наибольшей возрастающей подпоследовательности.
Пример 1
Ввод:
8
86 62 91 22 59 71 46 100
Вывод:
3
Пример 2
Ввод:
10
8 96 73 55 44 95 58 4 52 2
Вывод:
2
Пример 3
Ввод:
8
33 65 71 52 98 5 46 48
Вывод:
3
Var
День,Месяц:byte;
Begin
Write('№ дня = ');ReadLn(День);
Var C:=365-День;
Write('№ месяца = ');ReadLn(Месяц);
Case Месяц of
2:C:=C-31;
3:C:=C-59;
4:C:=C-90;
5:C:=C-120;
6:C:=C-151;
7:C:=C-181;
8:C:=C-212;
9:C:=C-243;
10:C:=C-273;
11:C:=C-304;
12:C:=C-334
End;
if (C mod 100>10)and(C mod 100<20) then Write('До нового года осталось ',C,' дней')
else
Case C mod 10 of
1:Write('До нового года остался ',C,' день');
2..4:Write('До нового года осталось ',C,' дня');
0,5..9:Write('До нового года осталось ',C,' дней')
End
End
Объяснение:
program test;
var
n, m: integer;
max: integer;
count: integer;
number: integer;
i: integer;
function GetDividersCount(number: integer): integer;
var
limit: integer;
count: integer;
i: integer;
begin
limit := number div 2;
count := 0;
for i := 1 to limit do
if number mod i = 0 then
count := count + 1;
result := count;
end;
begin
write('Enter range: ');
read(n, m);
max := 0;
for i := n to m do
begin
count := GetDividersCount(i);
if max < count then
begin
max := count;
number := i;
end;
end;
writeln('Result: ', number);
end.