LINUX.ORG.RU

История изменений

Исправление PolarFox, (текущая версия) :

Сначала идём по массиву слева направо, вода не может быть выше, чем высота самого высокого на текущий момент из пройденных здания. Текущая высота самого высокого здания у меня в current height, текущий объём воды в current water (что-то мне с утра сейчас кажется, что можно было обойтись без current water, сразу прибавлять к result, но не суть). Доходим до более высокого здания — сбрасывает current water в result, меняем current height.

Таким образом узнаем число воды слева вплоть до самого высокого здания (и номер самого высокого здания в массиве). Идём по массиву справа налево до этого здания, чтобы узнать сколько справа от него воды по такому же принципу.

Код решал на сишке потому что я не сразу заметил выбор языка чтобы не было искушения в цикле вызывать max, min и подобное, которые сами по себе уже O(n).

EDIT: А не, current water нужен чтобы в случаях вроде 11211 отбросить накопившиеся 2 куба воды с правого краю при первом обходе.

Исправление PolarFox, :

Сначала идём по массиву слева направо, вода не может быть выше, чем высота самого высокого на текущий момент из пройденных здания. Текущая высота самого высокого здания у меня в current height, текущий объём воды в current water (что-то мне с утра сейчас кажется, что можно было обойтись без current water, сразу прибавлять к result, но не суть). Доходим до более высокого здания — сбрасывает current water в result, меняем current height.

Таким образом узнаем число воды слева вплоть до самого высокого здания (и номер самого высокого здания в массиве). Идём по массиву справа налево до этого здания, чтобы узнать сколько справа от него воды по такому же принципу.

Код решал на сишке потому что я не сразу заметил выбор языка чтобы не было искушения в цикле вызывать max, min и подобное, которые сами по себе уже O(n).

EDIT: А не, current water нужен чтобы в случаях вроде 11211 отбросить накопившиеся 2 куба воды с краю при первом обходе.

Исходная версия PolarFox, :

Сначала идём по массиву слева направо, вода не может быть выше, чем высота самого высокого на текущий момент из пройденных здания. Текущая высота самого высокого здания у меня в current height, текущий объём воды в current water (что-то мне с утра сейчас кажется, что можно было обойтись без current water, сразу прибавлять к result, но не суть). Доходим до более высокого здания — сбрасывает current water в result, меняем current height.

Таким образом узнаем число воды слева вплоть до самого высокого здания (и номер самого высокого здания в массиве). Идём по массиву справа налево до этого здания, чтобы узнать сколько справа от него воды по такому же принципу.

Код решал на сишке потому что я не сразу заметил выбор языка чтобы не было искушения в цикле вызывать max, min и подобное, которые сами по себе уже O(n).