小塔有一个长度为 n 的数组 a1,a2,...,an,他每次会询问一个区间[l,r],他想知道数组a的所有长度大于等于l且小于等于r的子数组之和的最大值是多少。
如果数组a可以通过从数组b的开头删除若干(可能为零或全部)元素以及从结尾删除若干(可能为零或全部)元素得到,则数组a是数组b的子数组。
第一行输入两个整数n和q(1≤n≤3000;1≤q≤106)代表数组中的元素数量和询问次数。
第二行输入 n 个整数 a1,a2,...,an(−109≤ai≤109)代表数组元素。
此后q行,每行输入两个整数l,r(1≤l≤r≤n)代表询问的长度区间。
对于每个询问,在一行上输出一个整数代表答案。
本题读入量较大,python 代码可以使用
import sys
input = sys.stdin.readline
来加速输入。
输入
3 2
1 2 -1
1 2
3 3
输出
3
2
说明
对于第一个询问,长度为1的子数组有:{1}、{2}和{−1};
长度为2的子数组有:{1,2}、{2,−1},这五个数组和的最大值为 max{1,2,−1,1+2,2−1}=3。
输入
5 3
1 2 3 4 5
1 1
1 2
1 3
输出
5
9
12
说明
扫码备注加群即可,期待您的到来~
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.