3717: 学习绝对值(第三轮03)
题目描述
鸡尾酒的丹丹学了三个月 C + + 基础, 今天终于学到了条件分支 if 里面的逻 辑运算 && 和 ||,经过一段时间的学习之后,鸡尾酒问大家 || 是什么意思,大 家异口同声:绝对值符号。
看到大家这么喜欢绝对值,于是鸡尾酒给了大家一个简单的问题:给定 n 个数 字,数字只可能是 −2 、 − 1 、1 、2 四个中的一个。请问有多少个子数组满足其 最大值的绝对值等于最小值的绝对值?
丹丹看到题目后连忙提问:”老师,你说的第一个数字这个 2 前面的横杠是啥?“
看来丹丹是做不出来了,你可以帮帮他吗?
备注:子数组指的是连续的一段。
输入
第一行输入一个正整数 n,接下来一行输入 n 个数字, 仅可能是 -2 、-1 、1、2 中的一个。
输出
输出一行一个数字表示答案。
样例输入 复制
4
-2 -1 1 2
样例输出 复制
6
提示
样例 1 输入】
4
-2 -1 1 2
【样例 1 输出】
6
【样例 1 说明】
[-2] 、[-1] 、[1] 、[2] 、[-1,1] 、[-2,-1,1,2] 这六个子数组满足最大值和最小值的绝 对值相等。
【样例 2 输入】
1
1
【样例 2 输出】
1
【样例 3 输入】
5
1 -1 2 -1 1
【样例 3 输出】
7
【数据范围】
本题共有 10 个测试点
对于 1 − 2 测试点,有 n ≤ 5000
对于 3 测试点,有 n ≤ 50000
对于 4 测试点,所有数字的绝对值相等。1 ≤ n ≤ 50000
对于 5 测试点,所有数字均为正整数。1 ≤ n ≤ 100000
对于 6 − 7 测试点,没有 −2 这个数字, 1 ≤ n ≤ 100000
对于 8 测试点, 1 ≤ n ≤ 100000
对于 9 − 10 测试点, 1 ≤ n ≤ 500000