27

Решение: Максимальная сумма разностей

ЕГЭ · Информатика · Задание 27 · Динамическое программирование
ВысокаяФИПИA6A247Короткий ответ≈ 15 минутРазбор в 5 шагов
Условие

Пусть $S$ — последовательность из $N$ целых чисел, пронумерованных подряд начиная с 1. Обозначим $S_i$, $S_j$, $S_k$ три элемента последовательности $S$, где $i < j < k$. Определите в последовательности $S$ три таких числа $S_i$, $S_j$, $S_k$, что $S_i < S_j$, $S_k < S_j$, и значение выражения $(S_j - S_i) + (S_j - S_k)$ максимально. Гарантируется, что в последовательности есть три числа, удовлетворяющие условию задачи.

Даны два входных файла — файл A и файл B. В первой строке каждого файла содержится число $N$ ($5 \leq N \leq 10\,000\,000$). Каждая из следующих $N$ строк содержит одно целое число, значение которого по модулю не превышает 1000. Используйте данные из прилагаемых файлов.

Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

Решение по шагам

5 шагов
1

Для фиксированного среднего индекса $j$ выражение можно преобразовать:

$$(S_j-S_i)+(S_j-S_k)=2S_j-S_i-S_k$$
2

При фиксированном $j$ для максимизации выражения необходимо выбрать минимальный элемент слева от позиции $j$ и минимальный элемент справа от позиции $j$.

3

Построим массив суффиксных минимумов: для каждой позиции сохраним минимальное значение среди элементов правее неё.

4

При проходе слева направо поддерживаем минимум среди уже обработанных элементов. Для каждой внутренней позиции вычисляем значение $2S_j-L_j-R_j$, где $L_j$ — минимум слева, а $R_j$ — минимум справа.

Максимум вычисленных значений является ответом для файла. Алгоритм работает за $O(N)$ времени и использует $O(N)$ памяти; суффиксные минимумы можно вычислять и хранить в одном массиве.

Ответ

Точные два значения зависят от данных файлов A и B, которые не представлены во вложениях.

Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.

Где здесь ошибаются

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

Выбирать максимальные, а не минимальные элементы слева и справа.

Нарушать порядок индексов $i<j<k$.

Использовать первый или последний элемент как средний, хотя по обе стороны от $j$ должны существовать элементы.

Закрепить приёмВ теме «Динамическое программирование» ещё 71 задача — с ответом и таким же разбором.
Тренироваться

Как решать задание 27 ЕГЭ, информатика

Разбор этой задачи разложен на 5 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Динамическое программирование»: в ней 72 задачи, и у каждой есть такой же разбор. Регистрация не нужна.