Доброго времени суток, господа! Столкнулся со следующей задачей:
"Мощностью элемента назовем сумму максимального элемента, стоящего справа от него, и максимального элемента, стоящего от него слева. Мощность крайних элементов будем считать равной 0. У вас имеется первоначально пустой массив, к которому по очереди справа приписываются n целых чисел. На каждом шаге посчитайте и выведите наибольшее значение среди мощностей его элементов.
Формат ввода:
В первой строке входных данных записано целое число n (
).
Во второй строке записаны n целых чисел a_i(
) - последовательно добавляющиеся в массив элементы.
Формат вывода:
В качестве ответа выведите n целых чисел - наибольшие мощности на каждом из n шагов.
Пример 1:
Ввод:
3
1 3 4
Вывод:
0 0 6
Пример 2:
Ввод:
4
2 3 3 2
Вывод:
0 0 5 5"
Я придумал такое решение. Будем использовать невозрастающую бинарную кучу. До начала основного цикла запушим в кучу первые 2 элемента, а также выведем 2 нуля(первые 2 элемента, очевидно, всегда нули). Идея моего алгоритма заключается в том, что по факту, мы хотим найти сумму двух самых больших элементов текущей кучи, однако просто выводить сумму максимального и пред-максимального не получится, ибо они могут стоять рядом, а тогда это не прокатывает. Если эти элементы стоят рядом, найдем пред-пред-максимальный элемент, и, если он не стоит рядом с максимальным, то выведем сумму его и максимального, а если стоит, то выведем сумму пред-максимального и пред-пред-максимального. Там еще надо написать условие, что если, вдруг, максимальная сумма отрицательна, то надо выводить просто 0. Ну а дальше запускаем цикл, который на каждой итерации закидывает новый элемент в кучу, проверяет условия выше и выдает ответ. Я проверил этот алгоритм на парочке тестов и все было норм, пока сегодня, сидя на скучной паре в университете, в голову не пришел контрпример, показывающий неправильность моего алгоритма. Контрпример такой: На входе массив (198, 200, 800, 199). Правильным ответом должна быть последовательность 0 0 998 998, а мой алгоритм выдает 0 0 998 399. Я думаю, что можно это поправить, добавив поиск пред-пред-пред-максимального элемента, однако, как мне кажется, это уже чересчур громоздко. Кто-нибудь знает, как можно по-нормальному без костылей решить эту задачу? Быть может здесь можно как-то воспользоваться тем условием, что выходная последовательность неубывает?