const t = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [n, q] = t;const prefix = new Array(n + 1).fill(0); // prefix[i] = 앞에서 i개의 합for (let i = 0; i < n; i++) prefix[i + 1] = prefix[i] + t[2 + i];const out = [];for (let k = 0, pos = 2 + n; k < q; k++, pos += 2) { const l = t[pos], r = t[pos + 1]; out.push(prefix[r] - prefix[l - 1]);}console.log(out.join("\n"));
TypeScriptmain.ts · 11 行
import { readFileSync } from "node:fs";const t: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [n, q] = t;const prefix: number[] = new Array(n + 1).fill(0); // prefix[i] = 앞에서 i개의 합for (let i = 0; i < n; i++) prefix[i + 1] = prefix[i] + t[2 + i];const out: number[] = [];for (let k = 0, pos = 2 + n; k < q; k++, pos += 2) { const l = t[pos], r = t[pos + 1]; out.push(prefix[r] - prefix[l - 1]);}console.log(out.join("\n"));
JavaMain.java · 22 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()), q = Integer.parseInt(st.nextToken()); long[] prefix = new long[n + 1]; // prefix[i] = 앞에서 i개의 합 st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) prefix[i + 1] = prefix[i] + Long.parseLong(st.nextToken()); StringBuilder out = new StringBuilder(); for (int k = 0; k < q; k++) { st = new StringTokenizer(br.readLine()); int l = Integer.parseInt(st.nextToken()), r = Integer.parseInt(st.nextToken()); out.append(prefix[r] - prefix[l - 1]).append('\n'); } System.out.print(out); }}
C#Main.cs · 21 行
using System;using System.IO;using System.Text;class Program{ static void Main() { string[] t = Console.In.ReadToEnd().Split((char[])null, StringSplitOptions.RemoveEmptyEntries); int n = int.Parse(t[0]), q = int.Parse(t[1]); long[] prefix = new long[n + 1]; // prefix[i] = 앞에서 i개의 합 for (int i = 0; i < n; i++) prefix[i + 1] = prefix[i] + long.Parse(t[2 + i]); var sb = new StringBuilder(); for (int k = 0, pos = 2 + n; k < q; k++, pos += 2) { int l = int.Parse(t[pos]), r = int.Parse(t[pos + 1]); sb.Append(prefix[r] - prefix[l - 1]).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 20 行
#include <iostream>#include <vector>int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, q; std::cin >> n >> q; std::vector<long long> prefix(n + 1, 0); // prefix[i] = 앞에서 i개의 합 for (int i = 0; i < n; i++) { long long x; std::cin >> x; prefix[i + 1] = prefix[i] + x; } for (int k = 0; k < q; k++) { int l, r; std::cin >> l >> r; std::cout << prefix[r] - prefix[l - 1] << '\n'; }}
Cmain.c · 21 行
#include <stdio.h>#include <stdlib.h>int main(void) { int n, q; scanf("%d %d", &n, &q); long long *prefix = malloc((n + 1) * sizeof *prefix); // prefix[i] = 앞에서 i개의 합 prefix[0] = 0; for (int i = 0; i < n; i++) { long long x; scanf("%lld", &x); prefix[i + 1] = prefix[i] + x; } for (int k = 0; k < q; k++) { int l, r; scanf("%d %d", &l, &r); printf("%lld\n", prefix[r] - prefix[l - 1]); } free(prefix); return 0;}
Craykonmain.cray · 23 行
첫줄 = 控制台.读数字();n = 첫줄[0];q = 첫줄[1];// a를 그 자리에서 누적 합으로 바꾼다: a[i] = 앞에서 i+1개의 합a = 控制台.读数字();循环 (i = 1; i < n; i++){ a[i] = a[i] + a[i - 1];}循环 (k = 0; k < q; k++){ lr = 控制台.读数字(); l = lr[0]; r = lr[1]; 如果 (l == 1) { 控制台.输出(a[r - 1]); } 否则 { 控制台.输出(a[r - 1] - a[l - 2]); }}