1.简述:
给定一个长度为n的数组.
接下来有q次查询, 每次查询有两个参数l, r.
对于每个询问, 请输出
第一行包含两个整数n和q.
第二行包含n个整数, 表示.
接下来q行,每行包含两个整数 l和r.
输出q行,每行代表一次查询的结果.
输入:
3 2
1 2 4
1 2
2 3
输出:
3
6
2.代码实现:
标签:yyds,arr,前缀,int,long,nextInt,干货,new,dp From: https://blog.51cto.com/u_15488507/5846794
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int q = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
long[] dp = genDp(arr);
for (int i = 0; i < q; i++) {
int l = in.nextInt();
int r = in.nextInt();
long sum = l < 2 ? dp[r - 1] : dp[r - 1] - dp[l - 2];
System.out.println(sum);
}
}
}
public static long[] genDp(int[] arr) {
if (arr == null || arr.length < 1) {
return new long[0];
}
int n = arr.length;
long[] dp = new long[n];
// dp[0]
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
dp[i] = dp[i - 1] + arr[i];
}
return dp;
}
}