结束上一个板块二分查找,我们现在进入到的是前缀和。
本题要求是,返回一个数组中,给定的区间内的合。
使用到的方法是:前缀和。
具体来说,先利用给定的这个数组,再构造出一个新的数组。这个数组是原数组的前缀和数组。
红色的数组便是我们新构造的数组,每个位置的数字,是原数组当前下标及之前下标的合。
假设题目要问的是,arr[3] - arr[5]的和,我们只需要用新数组 dp[5] 减去 dp[2] ,就是题目需要的值。
此时若需要求得是3 5 7 9 的和,我们只需要用25减去1就可以得到。
代码:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int n = in.nextInt();
int q = in.nextInt();
int[] arr = new int[n+1];
for(int i = 1; i <= n; i++){
arr[i] = in.nextInt();
}
long[] dp = new long[n + 1];
for(int i = 1; i <= n; i++){
dp[i] = dp[i - 1] + arr[i];
}
while(q > 0){
int l = in.nextInt();
int r = in.nextInt();
System.out.println(dp[r] - dp[l - 1]);
q--;
}
}
}
}