Лучший отпуск
Время: 1 s · Память: 256 MB
- Префиксные суммы
Условие
В календаре одной страны год состоит из месяцев, -й месяц длится дней; дни месяца нумеруются от до . Годы идут друг за другом. Вы уходите в отпуск ровно на дней подряд, и в -й день месяца друг обнимает вас раз.
Отпуск может начаться в любой день и переходить через конец года в следующий. Какое наибольшее число объятий вы можете получить?
Формат ввода
В первой строке и (, ). Во второй — целых чисел ().
Формат вывода
Одно число — наибольшее число объятий.
Примеры
Ввод
3 2 1 3 1
Вывод
5
Ввод
3 6 3 3 3
Вывод
12
Ввод
5 6 4 2 3 1 3
Вывод
15
Примечание
Чтобы учесть переход через год, запишите массив месяцев дважды. Лучший отпуск всегда заканчивается в последний день какого-то месяца: иначе сдвиг на день вправо даёт не меньше объятий. Постройте две префиксные суммы — числа дней и числа объятий (). Для каждого месяца окончания найдите месяц начала двумя указателями или бинарным поиском; из первого месяца берутся только последние дни.
Ответ достигает — нужен 64-битный тип. В первом примере дни , лучший вариант : ответ .
