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