27

Решение: Максимальная нечётная сумма

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

Пусть $S$ — последовательность из $N$ целых чисел, пронумерованных подряд начиная с 1. Обозначим $S(L, R)$ подпоследовательность, состоящую из идущих подряд элементов, входящих в $S$, начиная с элемента с номером $L$ и заканчивая элементом с номером $R$ включительно.

Требуется найти такую подпоследовательность $S(L, R)$ максимальной длины, что сумма её элементов отрицательна и нечётна. Гарантируется, что хотя бы одна подпоследовательность требуемого вида существует.

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

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

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

5 шагов
1

Введём префиксные суммы $P_0=0$, $P_i=a_1+a_2+\dots+a_i$. Сумма подпоследовательности от $j+1$ до $i$ равна разности $P_i-P_j$.

$$S(j+1,i)=P_i-P_j$$
2

Разность $P_i-P_j$ нечётна тогда и только тогда, когда префиксные суммы имеют разную чётность.

3

Условие отрицательности суммы имеет вид $P_j>P_i$. Для каждого текущего $P_i$ нужно найти самый ранний индекс $j$ среди префиксных сумм противоположной чётности, которые больше $P_i$.

4

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

Алгоритм обрабатывает каждый элемент за логарифмическое время при использовании дерева отрезков или Fenwick tree после сжатия координат. Для каждого из файлов вычисляется отдельный максимум.

Ответ

Численные ответы зависят от содержимого файлов A и B.

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

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

Проверяют только нечётность суммы и забывают условие отрицательности.

Ищут подпоследовательность максимальной суммы вместо максимальной длины.

Перебирают все пары границ подпоследовательностей, что невозможно при $N$ до $10\,000\,000$.

Путают индекс префиксной суммы $j$ с левой границей подпоследовательности $j+1$.

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

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

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

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