Олимпиадный тренинг

Задача . D. Слаймовый побег


Вы играете в игру под названием Слаймовый побег. Игра проходит на числовой прямой. Изначально на прямой \(n\) слаймов. Для каждого целого числа \(i\) такого, что \(1 \le i \le n\), \(i\)-й слайм находится в позиции \(i\) и имеет здоровье \(a_i\). Вы управляете слаймом в позиции \(k\).

С прямой два выхода в позициях \(0\) и \(n+1\). Ваша цель — достигнуть любого из двух выходов после выполнения любого количества шагов.

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

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

Вы проигрываете, если в какой-то момент игры здоровье вашего слайма становится отрицательным.

Можете ли вы достичь одного из двух выходов, не проиграв?

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(3 \leq n \leq 200\,000\), \(1 \leq k \leq n\)) — количество слаймов и позиция вашего слайма.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — здоровье слаймов.

Гарантируется, что здоровье вашего слайма неотрицательное (\(a_k \geq 0\)), и у всех остальных слаймов здоровье не равно нулю (\(a_i \ne 0\) при \(i \ne k\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

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

Для каждого набора входных данных выведите «YES» (без кавычек), если можно добраться до выхода, не проиграв, иначе выведите «NO» (без кавычек).

Примечание

В первом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Один из способов выбраться — поглотить слаймов в позициях \(5\), \(6\) и \(7\). Вы достигнете выхода со здоровьем \(0\) в позиции \(8\).

Во втором примере вы управляете слаймом со здоровьем \(232\) в позиции \(1\). Так как ваш слайм уже у выхода в позиции \(0\), вы можете сразу переместиться туда, не поглощая других слаймов.

В третьем примере можно показать, что здоровье вашего слайма всегда достигнет отрицательных значений до того, как вы достигнете выхода.

В четвертом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Ниже описана возможная последовательность действий для победы.

  1. Поглотить слаймов в позициях \(5\), \(6\) и \(7\): ваше здоровье становится равно \(4\) после поглощения слайма со здоровьем \(-2\); становится \(1\) после поглощения слайма со здоровьем \(-3\); \(7\) после поглощения слайма со здоровьем \(6\).
  2. Поглотить слаймов в позициях \(3\) и \(2\): ваше здоровье становится \(7-7+10=10\).
  3. Поглотить слайм в позиции \(8\): ваше здоровье становится \(10-10=0\).
  4. Дойти до выхода в позиции \(9\).

Так как здоровье вашего слайма всегда оставалось неотрицательным, вы выиграли.


Примеры
Входные данныеВыходные данные
1 6
7 4
-1 -2 -3 6 -2 -3 -1
3 1
232 -500 -700
7 4
-1 -2 -4 6 -2 -4 -1
8 4
-100 10 -7 6 -2 -3 6 -10
8 2
-999 0 -2 3 4 5 6 7
7 3
7 3 3 4 2 1 1
YES
YES
NO
YES
NO
YES

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя