CF1333C Eugene and an array

题目描述

Eugene 喜欢研究数组。今天他需要你的帮助来解决一个有挑战性的问题。 如果数组 $c$ 可以通过从数组 $b$ 的开头删除若干(可能为零或全部)元素,并从末尾删除若干(可能为零或全部)元素得到,则称 $c$ 是 $b$ 的一个子数组。 我们称一个非空数组为“好”的,如果对于该数组的每一个非空子数组,其所有元素的和都不为零。例如,数组 $[-1, 2, -3]$ 是“好”的,因为其所有子数组 $[-1]$、$[-1, 2]$、$[-1, 2, -3]$、$[2]$、$[2, -3]$、$[-3]$ 的元素和都不为零。然而,数组 $[-1, 2, -1, -3]$ 不是“好”的,因为它的子数组 $[-1, 2, -1]$ 的元素和为 $0$。 请你帮助 Eugene 计算给定数组 $a$ 的非空“好”子数组的个数。

输入格式

输入的第一行包含一个整数 $n$($1 \le n \le 2 \times 10^5$),表示数组 $a$ 的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($-10^9 \le a_i \le 10^9$),表示数组 $a$ 的元素。

输出格式

输出一个整数,表示数组 $a$ 的“好”子数组的个数。

说明/提示

在第一个样例中,以下子数组是“好”的:$[1]$、$[1, 2]$、$[2]$、$[2, -3]$、$[-3]$。但是子数组 $[1, 2, -3]$ 不是“好”的,因为它的子数组 $[1, 2, -3]$ 的元素和为 $0$。 在第二个样例中,只有三个长度为 $1$ 的子数组是“好”的。同时,子数组 $[41, -41, 41]$ 不是“好”的,因为它的子数组 $[41, -41]$ 的元素和为 $0$。 由 ChatGPT 4.1 翻译