Максимальная сумма разностей
Пусть $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_i - S_j) + (S_k - S_j)$ максимально. Гарантируется, что в последовательности есть три числа, удовлетворяющие условию задачи.
Дано два входных файла — файл A и файл B. Каждый из них в первой строке содержит число $N$ ($5 \leq N \leq 10\,000\,000$) — количество целых чисел. Каждая из следующих $N$ строк содержит одно целое число, значение которого по модулю не превышает 1000.
Для каждого файла найдите максимальное значение выражения $(S_i - S_j) + (S_k - S_j)$. При обработке файла B нельзя использовать переборный алгоритм, вычисляющий величину для всех возможных троек, поскольку такая программа будет выполняться слишком долго.
Условие как в банке ФИПИ — открыть и сверить
| ||||||
| | ||||||
Формат: число или слово без единиц измерения; дробную часть отделяйте запятой.
1Мягкая — с чего смотретьуровень 1 из 3
Как выразить целевую функцию через значения элементов, стоящих слева и справа от $S_j$?
2Наводящая — какие числа считатьуровень 2 из 3
$(S_i - S_j) + (S_k - S_j) = S_i + S_k - 2S_j$. Для каждого среднего элемента нужно знать максимальный элемент слева и максимальный элемент справа.
3Прямая — фактически решениеуровень 3 из 3
Последовательно поддерживайте максимум слева, а массив или суффиксные максимумы — справа. Для каждого $j$ вычисляйте $\mathrm{maxLeft} + \mathrm{maxRight} - 2S_j$ и обновляйте общий максимум.
