题目描述
给定拥有n个数的序列A。定义f(k)表示在序列A中找出拥有k个元素的子序列(元素相同但位置不同的算多次),并将它们的积求和。
例如,当A={2,3,4},f(2)=26。原因如下: 所有的长度为2的子序列共有3个,分别是{2,3},{2,4},{3,4},它们的乘积之和为2×3+2×4+3×4=26。
现在,凉心的Ducati会q次询问你∑l=xy∑r=ly∑i=lrf(i)的值。这个式子的值等价于如下伪代码片段:
由于答案可能过大,请将答案对1000000007(109+7)取模。
输入格式
第一行输入n和q,表示序列中元素的个数与询问的次数。
第二行输入n个数,表示序列A的n个元素。
下面输入q行,每行两个整数x和y,表示询问∑l=xy∑r=ly∑i=lrf(i)的值。
输出格式
输出q行,第i行为第i个询问的答案。
输入输出样例
输入
输出
样例解释
首先,得到f(1)=6,f(2)=11,f(3)=6。
第一个询问是求f(1),即6。
第二个询问是求f(2)+(f(2)+f(3))+f(3),即34。
数据范围
对于100%的数据,1≤n,q≤1000,1≤ai≤109,x≤y。
Subtask 1(10%): x=y。
Subtask 2(20%): n,q≤5。
Subtask 3(20%): n,q≤100。
Subtask 4(10%): ai≤1000。
Subtask 5(40%): 无特殊限制。
贡献者
题面:Ducati
数据,核题:b6e0