2595. 区间极差乘和

2000ms 512MB 简单
题目描述
给定一个长度为 `n` 的整数序列 `a_1, a_2, ..., a_n`。 对于每一个非空连续子段 `[l, r]`,定义: - `mx(l,r)` 为子段最大值; - `mn(l,r)` 为子段最小值; - `sum(l,r)` 为子段元素和。 该子段的贡献为: $$ (mx(l,r) - mn(l,r)) \times sum(l,r) $$ 请求出所有非空连续子段的贡献之和,对 `1,000,000,007` 取模。 注意:最终答案可能为负数,请输出模意义下的非负结果。
输入格式
第一行一个整数 `n`。 第二行 `n` 个整数 `a_1, a_2, ..., a_n`。
输出格式
输出一个整数,表示答案对 `1,000,000,007` 取模后的非负结果。
样例 1
输入 (Input)

                    
输出 (Output)

                    
样例 2
输入 (Input)

                    
输出 (Output)

                    
样例说明
### 样例解释 1 所有子段如下: - `[1,1]`:`(1-1)*1 = 0` - `[2,2]`:`(3-3)*3 = 0` - `[3,3]`:`(2-2)*2 = 0` - `[1,2]`:`(3-1)*(1+3) = 2*4 = 8` - `[2,3]`:`(3-2)*(3+2) = 1*5 = 5` - `[1,3]`:`(3-1)*(1+3+2) = 2*6 = 12` 总和为 `8 + 5 + 12 = 25`。 ### 样例解释 2 - `[-1]`:贡献 0 - `[2]`:贡献 0 - `[-1,2]`:`(2 - (-1)) * (1) = 3` 答案为 3。
- $1 <= n <= 10^6$ - $-10^9 <= a_i <= 10^9$ - 模数为 `MOD = 1,000,000,007`
自测终端 stdin → stdout
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
训练中心
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字