#CF1734D. 史莱姆逃生

史莱姆逃生

史莱姆逃生

  • 时间限制:2 秒
  • 内存限制:256 MiB

题目描述

数轴的位置 1,2,…,n1,2,\ldots,n 上各有一只史莱姆,第 ii 只史莱姆的生命值为 aia_i。你控制位置 kk 上的史莱姆,其初始生命值为 aka_k。位置 00 和 n+1n+1 各有一个出口。

每次操作,你可以让自己的史莱姆向左或向右移动一格。如果新位置上还有一只史莱姆,你必须吸收它,生命值随之增加该史莱姆的生命值;被吸收的史莱姆消失。某些生命值可能为负,因此吸收后生命值可能下降。如果任意时刻你的生命值变成负数,你立即失败。

请判断能否在生命值始终非负的前提下,到达任意一个出口。

输入格式

第一行一个整数 tt,表示测试用例数。

每个测试用例的第一行包含两个整数 n,kn,k;第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

输出格式

对每个测试用例输出一行:能够逃脱则输出 YES,否则输出 NO。

样例输入 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

样例输出 1

YES
YES
NO
YES
NO
YES

数据范围

对所有数据:

  • 1≤t≤200001\le t\le 20000;
  • 3≤n≤2000003\le n\le 200000,1≤k≤n1\le k\le n;
  • −109≤ai≤109-10^9\le a_i\le 10^9;
  • ak≥0a_k\ge 0,且对 i≠ki\ne k 有 ai≠0a_i\ne0;
  • 单个输入文件内所有测试用例的 nn 之和不超过 200000200000。

本题采用独立测试点计分,每个测试点等分。只有通过某测试点中的全部测试用例,才能获得该测试点分数。

子任务编号 分值 特殊限制
1 20 n≤10n \le 10
2 40 n≤300n \le 300
3 无特殊限制

提示

已吸收的位置始终形成一个包含 kk 的连续区间。对于一侧,可以把从当前位置向外的一段看成一个整体:若穿过这一段所需的最低生命值不超过当前生命值,并且该段总和为正,穿过它只会让后续选择更宽裕。