记序列为 a1,a2,…,am,定义相邻差分为 di=ai+1−ai(1≤i<m)。
对于一个长度至少为 3 的子段,其内部位置 ai(l+1≤i≤r−1)满足条件:
(ai≤ai−1 且 ai≤ai+1) 或 (ai≥ai−1 且 ai≥ai+1)
这等价于“该位置为波峰或波谷(允许相邻相等)”。该条件用差分可表示为:
di−1×di≤0
因此,一个原数组的子段 al,al+1,…,ar(r−l+1≥3)是 理想波形段 当且仅当它对应的差分区间 dl,dl+1,…,dr−1 中,任意相邻两个差分都满足乘积 ≤0。
在音频分析中,我们获得了一个长度为 m 的采样序列 a1,a2,…,am。
对于一个长度至少为 3 的连续子段,如果该子段内除两端的每一个采样值 ai 都满足:ai≤ai−1 且 ai≤ai+1,或者 ai≥ai−1 且 ai≥ai+1(相等也算),就称该子段是一个理想波形段。
对于原序列的每一个非空连续子段:
3,则对答案贡献为 0。2)。请计算所有连续子段产生的总贡献,并对 109+7 取模。
约束条件:
1000000000。1000000007 取模。第一行包含一个整数 T,表示测试数据组数。 接下来依次描述每组数据: 每组数据的第一行包含一个整数 m,表示采样序列的长度。 第二行包含 m 个整数 a1,a2,…,am,表示采样值。
对于每组测试数据,输出一行一个整数,表示该组数据的总贡献对 109+7 取模后的结果。
输入
2
1
100
3
1 1 1
输出
0
1
说明
第一组数据:序列长度 1 < 3,不存在长度至少为 3 的子段,因此贡献为 0。
第二组数据:序列 [1, 1, 1],长度 3。差分数组为 d1=1−1=0,d2=1−1=0,相邻差分乘积 d1×d2=0≤0,满足理想波形段条件。差分段长度 s=2,贡献为 6s(s−1)(s+1)=62×1×3=1。
输入
1
4
2 2 2 2
输出
4
说明
序列 [2, 2, 2, 2],长度 4。差分全为 0,任意相邻差分乘积均为 0,整个差分段长度 s=3。
贡献公式 6s(s−1)(s+1)=63×2×4=4。从子段角度验证:长度为 3 的理想波形段有 [2,2,2](索引 0..2)和 [2,2,2](索引 1..3),各贡献 1;长度为 4 的理想波形段为整个数组,贡献 2。总和为 1+1+2=4。
输入
1
5
3 1 4 1 5
输出
10
说明
序列 [3, 1, 4, 1, 5],长度 5。差分依次为 −2,3,−3,4,相邻乘积分别为 (−2)×3=−6≤0,3×(−3)=−9≤0,(−3)×4=−12≤0,所有相邻差分乘积均非正,构成一个完整的合法差分段,长度 s=4。
贡献为 64×3×5=10。即所有长度 ≥3 的子段都是理想波形段,内部满足条件的采样点个数之和为 10。
输入
1
8
1 2 3 2 1 2 3 4
输出
2
说明
序列 [1, 2, 3, 2, 1, 2, 3, 4],长度 8。通过相邻差分乘积判断,该序列的差分段在以下位置出现不合法:
因此整个差分序列被切分为多段,合法段长度 s 分别为 1、2、2、1。根据公式,仅 s=2 贡献非零,每段贡献 62×1×3=1。两个 s=2 的段总贡献为 2。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.