Автор задачі: | De3b0o |
Підготував: | De3b0o |
Редактор: | Hasan Saleh (MathModel) |
Розв’язок
Факт: якщо виконувати операцію в індексі , оптимально обирати x = \max(a_1,a_2,...,a_{i-1}).
Доведення:
Є два випадки:
Якщо спочатку a_i \le \max(a_1,a_2,...,a_{i-1}), тоді вибір x = \max(a_1,a_2,...,a_{i-1}) збільшує mog на .
Інакше, якщо a_i > \max(a_1,a_2,...,a_{i-1}), тоді вибір x = \max(a_1,a_2,...,a_{i-1}) не змінює mog для префікса , але може збільшити його для всього масиву, дозволяючи нові максимуми після .
Алгоритм:
Пройти масив зліва направо, зберігаючи:
: поточний максимум.
: друге за величиною значення перед максимумом.
: поточне значення mog (кількість нових максимумів).
: індекс останнього максимуму.
Для кожного :
Якщо mx1 \le a_i, це новий максимум:
Збільшити на .
Оновити mx2 = mx1, mx1 = a_i.
Оновити id = i.
Інакше, якщо mx2 \le a_i \le mx1:
Збільшити dp_{id} на .
Оновити mx2 = a_i.
Після обробки:
ans = c + \max(dp_i)
Складність: на тест.