小红不想做平衡树
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

众所周知,平衡树可以实现数组的子区间位置翻转功能,但小红不想做平衡树。她希望你帮她解决以下问题:

小红定义一个数组为“好数组”,当且仅当这个数组可以恰好翻转一个区间后变成升序。例如:[1,4,3,2,7]是好数组。

现在小红拿到了一个排列,她想知道这个排列有多少连续子数组是好数组?

输入描述:

第一行输入一个正整数n,代表排列的大小。
第二行输入n个正整数a_i,代表小红拿到的排列。
1\leq n\leq 200000
1\leq a_i \leq n
保证每个a_i都不相等。

输出描述:

一个整数,代表是“好数组”的连续子数组数量。
示例1

输入

复制
4
2 3 1 4

输出

复制
8

说明

长度为1的4个连续子数组都是好数组。
长度为2的3个连续子数组都是好数组。
长度为3的2个连续子数组中,[3,1,4]是好数组。
长度为4的连续子数组不是好数组。