Задание № 7515

Пусть дана последовательность А целых чисел, пронумерованных от 1 до N. Будем называть невозрастающей подпоследовательностью подряд идущие элементы последовательности, такие, что Аi ⩾ Аi + 1 ⩾ ... ⩾ Ak - 1 ⩾ Ak, (k > i > 0). Длиной подпоследовательности будем называть количество входящих в неё элементов. Любой отдельно взятый элемент представляет собой невозрастающую подпоследовательность длины 1. От цифровых датчиков в компьютер поступает информация о характеристиках физического процесса. Результатом каждого измерения является целое число.

Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет искать максимальную длину невозрастающей подпоследовательности.

Следует учитывать, что количество измерений может быть очень велико.

Перед текстом программы кратко опишите используемый вами алгоритм решения задачи. На вход программе в первой строке подаётся общее количество N значений измерений. В каждой из последующих N строк записано целое число. Гарантируется, что N ⩾ 1, то есть всегда имеется хотя бы одно значение измерений.

<!—QuoteBegin—>
<!—QuoteEBegin—>

Пример входных данных:

5

-1000

0

-300

2

2000

<!—QuoteEnd—>
<!—QuoteEEnd—>

Результатом работы программы должно являться целое число — максимальная длина невозрастающей подпоследовательности.

Пример выходных данных для приведённого выше примера входных данных:

2


Решать другие задания по теме: Об­ра­бот­ка символьных строк

Показать ответ
Комментарий:

Содержание верного ответа

Программа читает значения измерений, обновляя при необходимости текущую максимальную длину искомой последовательности. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая. Ниже приведёны примеры решения задания на языках Паскаль, Бейсик и алгоритмическом языке. Допускаются решения, записанные на других языках программирования

Пример правильной и эффективной программы на языке Бейсик

DIM N, cnt, i, t, prev, Max AS INTEGER Max = 1 cnt = 1 INPUT NREM Считали количество измерений FOR i = 1 TO N 	INPUT tREM Считали очередное значение 	IF i = 1 THEN 		prev = t 	ELSE		IF prev >= t THEN 			cnt = cnt + 1 		ELSE			IF cnt > Max THEN 				Max = cntREM Обновление максимальной длины 				cnt = 1 			END IF 		END IF 		prev = t 	END IF NEXT iIF cnt > Max THEN 	Max = cntREM Обработка «хвоста» последовательности END IFPRINT Max

Пример правильной и эффективной программы на языке Паскаль

var N, cnt, i, t, prev, Max: integer; begin	Max := 1; 	cnt := 1;	ReadLn(N); {Считываем количество измерений}	for i := 1 to N do	begin		ReadLn(t); {Считали очередное значение}		if i = 1 then prev := t		else			if prev >= t then cnt := cnt + 1			else			begin				if cnt > Max then				Max := cnt; {Обновление максимальной длины} 				cnt := 1; 			end;		prev := t; 	end;	if cnt > Max then		Max := cnt; {Обработка «хвоста» последовательности}	WriteLn (Max); end.
Ответ:

Нашли ошибку в задании? Выделите фрагмент и нажмите Ctrl + Enter.