数组的贡献
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个长度为 n 数组 a ,对于该数组的任意连续子区间 [l,r] (1 \leq l \leq r \leq n) ,定义其贡献为:子区间中满足 a_i \geq \max(a_l, a_r) (l\leq i \leq r) 的元素个数。整个数组的总贡献定义为所有连续子区间的贡献之和。
计算数组 a 的总贡献,结果对 10^9+7 取模。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T \left(1\leq T\leq 10^3\right) 代表数据组数,每组测试数据描述如下:

第一行包含一个整数 n (1 \leq n \leq 2 \times 10^5) ,表示该数组的大小。

第二行包含 n 个用空格分隔的整数 a_i (1 \leq a_i \leq 10^9) ,其中第 i 个数字表示数组第 i 项的值。

保证所有的 n 的总和不超过 10^6

输出描述:

在一行中输出一个整数,表示给定数组的贡献。
示例1

输入

复制
2
4
1 2 4 3
5
1 1 2 2 1

输出

复制
12
27