import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" ");
        int n = Integer.parseInt(line[0]);
        int q = Integer.parseInt(line[1]);
        
        int[] a = new int[n + 1];
        line = br.readLine().split(" ");
        for (int i = 1; i <= n; i++) {
            a[i] = Integer.parseInt(line[i - 1]);
        }
        
        long[] prefix = new long[n + 1];
        for (int i = 1; i <= n; i++) {
            prefix[i] = prefix[i - 1] + a[i];
        }
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < q; i++) {
            line = br.readLine().split(" ");
            int l = Integer.parseInt(line[0]);
            int r = Integer.parseInt(line[1]);
            long sum = prefix[r] - prefix[l - 1];
            sb.append(sum).append('\n');
        }
        System.out.print(sb.toString());
    }
}

https://www.nowcoder.com/discuss/727521113110073344

思路:

  1. 输入处理:使用BufferedReader读取输入以提高效率,读取数组大小n和查询次数q。
  2. 数组初始化:创建数组a存储输入元素,索引从1开始以便直接对应查询的区间。
  3. 前缀和计算:构建前缀和数组prefix,其中prefix[i]表示前i个元素的和。
  4. 查询处理:对于每个查询,计算区间和并存入StringBuilder,最后统一输出以减少IO操作次数。