Задача №114553. Небоскрёбы

Участникам, использующим язык Python3 , рекомендуется отправлять решения на проверку с использованием интерпретатора PyPy3 .

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возводить небоскрёбы, по одному зданию на один участок.

Архитекторы при планировании зданий должны учитывать несколько требований. Во-первых, поскольку земля на каждом участке имеет разные свойства, для каждого небоскрёба есть свое ограничение по количеству этажей, которое он может иметь. Во-вторых, согласно дизайн-коду города, недопустима ситуация, когда для какого-то небоскрёба сразу по обе стороны от него есть небоскрёбы выше него.

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть запланировано больше \(m_i\), и также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\) таких, что \(j \lt i \lt k\), и \(a_j \gt a_i \lt a_k\).

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

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 500\,000\)) — количество участков.

Вторая строка содержит \(n\) целых чисел. \(i\)-е число задает значение \(m_i\) (\(1 \leq m_i \leq 10^9\)) — максимально возможное количество этажей для небоскрёба на участке \(i\).

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное. Если возможных ответов несколько, выведите любой.

Примечание

В первом тестовом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором тестовом примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

Система оценки

В данной задаче \(50\) тестов, помимо тестов из условия, каждый из них оценивается в \(2\) балла. Результаты работы ваших решений на первых \(30\) тестах будут доступны во время соревнования. Результаты работы на остальных \(20\) будут доступны после окончания соревнования.

Решения, корректно работающие при \(1 \leq n \leq 7, 1 \leq a_i \leq 7\), наберут не менее \(20\) баллов.

Решения, корректно работающие при \(1 \leq n \leq 100\), наберут не менее \(40\) баллов.

Решения, корректно работающие при \(1 \leq n \leq 5000\), наберут не менее \(60\) баллов.

Примеры
Входные данные
5
1 2 3 2 1
Выходные данные
1 2 3 2 1 
Входные данные
3
10 6 8
Выходные данные
10 6 6 
Сдать: для сдачи задач необходимо войти в систему