小红的不动点权值
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义一个数组的权值为:将其从小到大排序后,不动点^\texttt{[1]}的数量。
\hspace{15pt}现在,小红拿到了一个长为 n 的排列^\texttt{[2]},他想知道其所有子数组^\texttt{[3]}的权值之和,请你帮帮她。

【名词解释】
\hspace{15pt}不动点^\texttt{[1]}定义整数 i\left(1\leqq i \leqq m \right) 是长度为 m 的数组 \{a_1,a_2,\dots,a_m\} 的一个不动点,当且仅当满足 a_i = i
\hspace{15pt}排列^\texttt{[2]}:长度为 n 的排列是由 1,2,\dots,n 这 n 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\} 和 \{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
\hspace{15pt}子数组^\texttt{[3]}:从原数组中,连续的选择一段元素(可以全选、可以不选)得到的新数组。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left( 1\leqq n \leqq 3 \times 10^5\right),代表排列中的元素数量。
\hspace{15pt}第二行输入 n 个互不相同的整数 a_1,a_2,\dots,a_n\left(1\leqq a_i \leqq n\right),代表一个排列。

输出描述:

\hspace{15pt}输出一个整数,代表子数组权值之和。
示例1

输入

复制
4
1 4 2 3

输出

复制
8
示例2

输入

复制
2
2 1

输出

复制
3