问题 D: 海浪

内存限制:128 MB 时间限制:1 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

染染船长,准备出发!

话虽然是这么说,但出发之前除了建设好整条船,还需要观察一下海面的情况,选择一个良辰吉日出海。

海面情况的一个重要指标就是海浪,尤其是其中很长的海浪。

为了能够量化这个问题,染染将本该连续的海面离散化成为了一个长度为 nn 的整数高度序列 h1,h2,⋯,hnh1,h2,,hn,可以认为 hihi 表示第 ii 块海面的波动高度。此时海浪可以定义为连续的海面 hl,hl+1,⋯,hrhl,hl+1,,hr,满足存在实数基准高度 hBhB,使得对于 i=l+1,l+2,⋯,ri=l+1,l+2,,r 都有:(hi−1−hB)⋅(hi−hB)<0(hi1hB)(hihB)<0

染染现在会给出 qq 次询问,每次询问给出 x,yx,y 表示查询完全包含在连续的海面 hx,hx+1,⋯,hyhx,hx+1,,hy 内的最长海浪的长度。也就是说染染要找到海浪 hl,hl+1,⋯,hrhl,hl+1,,hr 使得 x≤l≤r≤yxlry 并最大化 r−l+1rl+1

输入格式

本题单个测试点内包含多组测试数据。

输入第一行一个正整数 T (1≤T≤20)T (1T20),表示数据组数。

每组数据第一行两个正整数 n,q (1≤n,q≤105)n,q (1n,q105),表示海面被离散化后的序列长度。

第二行 nn 个正整数 h1,h2,⋯,hn (−109≤hi≤109)h1,h2,,hn (109hi109),表示海面被离散化后的序列。

接下来 qq 行,第 ii 行包含两个正整数 x,y (1≤x≤y≤n)x,y (1xyn),表示第 ii 次询问。

保证单个测试点内每组数据中 nn 的和与 qq 的和不超过 106106

输出格式

为了避免输出量过大,输出对每组数据进行压缩。

对于每组数据,假设染染第 ii 次询问的答案为 riri,你只需要输出一行一个压缩后的非负整数 RRR=(∑i=1qi⋅ri)mod(109+7)R=(i=1qiri)mod(109+7)

输入样例 复制

1
7 3
-1 1 -1 1 3 7 3
1 3
3 7
1 5

输出样例 复制

21

数据范围与提示

第 11 次询问的答案为 33,对应海浪 h1,h2,h3h1,h2,h3 即 −1,1,−11,1,1

第 22 次询问的答案为 33,对应海浪 h5,h6,h7h5,h6,h7 即 3,7,33,7,3

第 33 次询问的答案为 44,对应海浪 h1,h2,h3,h4h1,h2,h3,h4 即 −1,1,−1,11,1,1,1