Локальные пики длительности тренировок

тема: Временные ряды и окна · уровень: средний

Условие

Бегун ведёт дневник длительности ежедневных тренировок. Для каждого дня записано число минут тренировки. Если запись за день отсутствует, вместо длительности указано значение -1.

День с номером i называется локальным пиком, если он не является первым или последним днём, записи существуют в днях i-1, i, i+1, а длительность тренировки в день i строго больше длительностей в оба соседних дня.

Для каждого запроса задана минимальная длительность T. Требуется посчитать число локальных пиков, длительность которых не меньше T. Формально ответ на запрос равен

P(T) = Σ [x[i-1], x[i], x[i+1] не равны -1 и x[i] > x[i-1] и x[i] > x[i+1] и x[i] >= T]

где сумма берётся по всем i от 2 до n-1, а выражение в квадратных скобках равно 1, если условие выполнено, и 0 иначе. При равенстве длительности с хотя бы одним соседом день не считается локальным пиком. Первый и последний дни не считаются локальными пиками. Пропуск в любом из трёх рассматриваемых дней не позволяет считать средний день локальным пиком.

Формат ввода

В первой строке дано целое число n — число дней в дневнике.

В следующих n строках дано по одному целому числу x[i] — длительность тренировки в минутах за день i, либо -1, если запись отсутствует.

В следующей строке дано целое число q — число запросов.

В следующих q строках дано по одному целому числу T — минимальная длительность локального пика для соответствующего запроса.

Формат вывода

Выведите q целых чисел, по одному в строке. Число в строке с номером j должно быть ответом на запрос с номером j.

Дробная часть отсутствует: каждый ответ выводится как целое число без округления.

Ограничения

1 <= n <= 2000.

x[i] равно -1 либо является целым числом от 0 до 300.

1 <= q <= 2000.

0 <= T <= 300.

Текстовых полей во входных данных нет.

Решить задачу с автопроверкой на Python →

Куда дальше