题目:
给定一个长度为n的整数数组α以及m个查询。每个查询包含三个整数l,r,k表示询问l~r之间所有元素的k次方和。请对每个查询输出一个答案,答案对 109 + 7 取
模。
输入格式:
第一行输入两个整数n,m其含义如上述。
第二行输入n个整数a[1],a[2],….,a[n]。
接下来m行,每行输入三个整数l,r,k表示一个查询。
输出格式:
输出m行,每行一个整数,表示查询的答案对109 + 7取模的结果。
样例输入:
1
2
3
4
5
|
5 3
1 2 3 4 5
1 3 2
2 4 3
3 5 1
|
样例输出:
数据规模:

最终代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
long mod = 1000000007;
int a[] = new int[n + 1];
long s[][] = new long[6][n + 1];
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
for (int i = 1; i <= n; i++) {
int cur = 1;
for (int k = 1; k <= 5; k++) {
cur = (int) (cur * a[i] % mod);
s[k][i] = (s[k][i - 1] + cur) % mod;
}
}
for (int i = 1; i <= m; i++) {
int l = sc.nextInt();
int r = sc.nextInt();
int k = sc.nextInt();
long result = s[k][r] - s[k][l - 1];
System.out.println(result);
}
}
}
|