Максимальна сума#12782

Максимальна сума (Розбір)

Автор задачі:

Мар'ян Шийка

Підготував:

Мар'ян Шийка

Розбір:

Мар'ян Шийка

Ідея

Помітимо, що для фіксованого індексу , для якого s_i=0, нам достатньо знати лише один індекс j>i, для якого s_j=1 та значення a_j є максимально можливим.

Справді, якщо ми вже зафіксували , то значення a_i не змінюється, тому для максимізації суми

a_i+a_j

нам завжди вигідно взяти найбільше можливе a_j серед усіх позицій праворуч, де s_j=1.

Тому пройдемо масив справа наліво та будемо підтримувати значення

mx=\max a_j

серед усіх уже розглянутих позицій , для яких s_j=1.

Якщо на поточній позиції маємо s_i=0, то, якщо mx>a_i, можемо оновити відповідь значенням

a_i+mx.

Якщо ж s_i=1, оновимо

mx=\max(mx,a_i).

Таким чином, кожну позицію ми обробляємо рівно один раз.

Загальна асимптотика — .