序列划分
题号:NC282073
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Alice现在通过随机数生成了一个长度为n的序列。

定义一个序列是好的,当且仅当:
- 对于这个序列,任意截取序列中前若干个数字,其和均非负。

例如:序列[1, 2, -3]是好的,序列[5, -3, -3, 9]是不好的。这是因为对于5 - 3 - 3 = -1 < 0。

现在Alice希望把这个序列划分成若干个连续的子序列,使得划分后的每个子序列都是好的。有些情况下不止一种划分方案,Alice希望你给出最多的序列划分方案。

输入描述:

第一行一个正整数n表示序列的长度n。其中保证1 \le n \le 2 * 10^5

接下来一行n个整数a_1, a_2, ..., a_n,表示这个序列。其中保证-10^4 \le a_i \le 10^4

输出描述:

存在划分方案时,给出最多划分数量。

不存在划分方案时,给出-1。
示例1

输入

复制
4
1 2 -3 0

输出

复制
2