Problem D. 第 k 次部分和
Problem D. 第 k 次部分和
时间限制:3s
空间限制:256MB
题目背景
纳西妲研究完了斐波那契数列,又开始对前缀和感兴趣了。她了解到前缀和数组可以加速求数组的部分和,这就让她思考到,如果对前缀和数组继续一直求前缀和,又该如何求部分和呢?
题目描述
对一个长度为 \(n\) 的数组 \(A = [a_1, a_2, a_3, ..., a_n]\) 进行多次求前缀和的操作
设 \(S_{k,i}\) 表示第 \(k\) 次前缀和的第 \(i\) 项,它的定义如下:
- \(S_{0,i}\) 为原数组,即 \(S_{0,1} = a_1\),\(S_{0,2} = a_2\), ..., \(S_{0, n} = a_n\).
- \(S_{1,i}\) 为原数组的前缀和数组,即\(S_{1,1} = a_1\), \(S_{1,2} = a_1 + a_2\), ..., \(S_{1,n} = a_1 + a_2 + ... + a_n\).
- \(S_{k,i} = S_{k-1,1} + S_{k-1, 2} + ... + S_{k-1,i}\). (\(k \ge 1\))
现在给定数组 \(A\) 及其长度 \(n\),询问多组 \(k, l, r\),输出 \(S_{k,l} + S_{k,l+1} + ... + S_{k,r-1} + S_{k, r}\) 的值。
输入格式
第一行两个整数 \(n\) 和 \(T\) ,代表数组长度和询问组数;
第二行 \(n\) 个整数,用空格隔开,代表数组 \(A\);
接下来 \(T\) 每行三个整数 \(k, l, r\), 用空格隔开,代表每组询问。
输出格式
输出 \(T\) 行,每行一个整数,代表 \(S_{k,l} + S_{k,l+1} + ... + S_{k,r-1} + S_{k, r}\) 的结果;由于结果可能很大,请输出结果对 \(1e9 + 7\) 取模的值。
样例输入1
4 3
1 2 3 4
0 1 4
1 2 3
3 4 4
样例输出1
10
9
35
样例1解释
\(S_{0 \sim 3, 1 \sim 4}\) 的值如下:
\(S_0 = [1,2,3,4]\)
\(S_1 = [1,1+2,1+2+3,1+2+3+4] = [1,3,6,10]\)
\(S_2 = [1,1+3,1+3+6,1+3+6+10] = [1,4,10,20]\)
\(S_3 = [1,1+4,1+4+10,1+4+10+20] = [1,5,15,35]\)
样例输入2
见sum2.in
样例输出2
见sum2.out
样例输入3
见sum3.in
样例输出3
见sum3.out
数据范围与限制
测试点编号 | 约定 | 测试点分值 |
---|---|---|
\(1 \sim 2\) | \(T = 1, k_1 = 0\) | 每个测试点5分 |
\(3 \sim 4\) | \(k_i = 0\) | 每个测试点5分 |
\(5 \sim 8\) | \(1 \le n \le 100, 0 \le k_i \le 9\) | 每个测试点5分 |
\(9 \sim 12\) | \(1 \le n \le 1000, 0 \le k_i \le 999\) | 每个测试点5分 |
\(13 \sim 20\) | 无特殊约定 | 每个测试点5分 |
对于所有测试点, \(1 \le n \le 10^5\), \(1 \le T \le 500\),\(0 \le a_i \le 10^9\), \(0 \le k_i \le 10^6\), \(1 \le l_i \le r_i \le n\).
信息
- ID
- 1516
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 36
- 已通过
- 2
- 通过率
- 6%
- 上传者