A. 好数组(Eugene and an array)
| 项目 | 内容 |
|---|---|
| 时间限制 | 1 秒 |
| 内存限制 | 256 MB |
| 输入 / 输出 | 标准输入 / 标准输出 |
题目描述
Eugene 喜欢处理数组,今天他需要你的帮助来解决一个挑战性的任务。
若数组 c 可以由数组 b 通过删除开头若干个(可能为零个或全部)元素、再删除末尾若干个(可能为零个或全部)元素得到,则称 c 是 b 的一个子数组。
我们称一个非空数组是"好"的,当且仅当它的每一个非空子数组的元素和都不为 0。
例如,数组 [-1, 2, -3] 是好的,因为它的所有子数组 [-1]、[-1,2]、[-1,2,-3]、[2]、[2,-3]、[-3] 的元素和都不为 0。
而数组 [-1, 2, -1, -3] 不是好的,因为它的子数组 [-1, 2, -1] 的元素和为 0。
给定一个长度为 n 的数组 a,请你帮忙计算 a 中非空的好子数组的数量。
输入格式
第一行包含一个整数 n(1 ≤ n ≤ 2×10⁵)——数组 a 的长度。
第二行包含 n 个整数 a₁, a₂, ..., aₙ(−10⁹ ≤ aᵢ ≤ 10⁹)——数组 a 的元素。
输出格式
输出一个整数——a 中好子数组的数量。
样例
样例 1
输入:
3
1 2 -3
输出:
5
说明:好子数组为 [1]、[1,2]、[2]、[2,-3]、[-3]。而 [1,2,-3] 不是好的,因为它的子数组 [1,2,-3] 元素和为 0。
样例 2
输入:
3
41 -41 41
输出:
3
说明:三个长度为 1 的子数组是仅有的好子数组。[41,-41,41] 不是好的,因为子数组 [41,-41] 元素和为 0。
数据范围与子任务
| 子任务 | 分值 | 数据范围 | 特殊性质 | |
|---|---|---|---|---|
| 1 | 20% | n ≤ 100 |
无 | |
| 2 | 30% | n ≤ 2000 |
无 | |
| 3 | 50% | n ≤ 2×10⁵ |
无 |
- 对于 100% 的数据:
1 ≤ n ≤ 2×10⁵,−10⁹ ≤ aᵢ ≤ 10⁹。
