无聊的子序列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Hz 现在很无聊,他看到了一个数组,想找点乐趣。

一个长度为 $n$ 数组 $a$,问有多少个子数组满足:该子数组中不存在任何长度 $\ge$ 3 的非严格单增或者非严格单减子序列。更确切的说,子数组 $b$ 中,不存在 $1 \leq i < j < k \leq |b|$,使得 $b[i] \leq b[j] \leq b[k]$ 或者 $b[i] \ge b[j] \ge b[k]$ 成立。

现在Hz要统计这样的子数组的个数。

详解请看样例解释。

*子数组:数组中一段连续元素组成的序列。
*子序列:从数组中选取若干个元素,保持相对顺序,不要求连续。

输入描述:

第一行给定一个整数 n (1 \leq n \leq 10^6),表示数组的大小。
第二行给定 n 个整数,第 i 个整数表示数组中的 第 i 个元素 a_i (-10^9 \leq a[i] \leq 10^9)

输出描述:

一个整数,表示符合条件的子数组数量。
示例1

输入

复制
6
3 6 4 5 2 2

输出

复制
14

说明

子数组 [3,6,4,5] 不满足条件,因为存在 子序列 3 4 5 为非严格单调递增。
子数组 [6,4,5,2] 不满足条件,因为存在 子序列 6 4 2 为非严格单调递减。
子数组 [4,5,2] 满足条件。