期間ごとの売上の合計

  • 累積和
  • 問題 03
  • ふつう
  • 目安 31 分

毎日の売上と、何日目から何日目までの合計を知りたいかという質問が何度も与えられる。累積和で、質問ごとに全部を足し直さずに答える練習です。

本番の試験は PC で受けることが多いので、PC での練習をすすめます。スマホでも、読んで、書いて、採点するところまで動きます。

入力は標準入力から読み、答えは標準出力に書きます。1 テストあたり 2 秒までです。

問題

ある店の、N 日間の毎日の売上が与えられます。そのあとに Q 個の質問が続きます。質問は 2 つの整数 l と r で、「l 日目から r 日目まで (l 日目と r 日目を含む) の売上の合計はいくらか」を表します。Q 個の質問のそれぞれに、答えを 1 行ずつ出力してください。

入力の形式

N Q
a_1 a_2 ... a_N
l_1 r_1
l_2 r_2
...
l_Q r_Q

1 行目に日数 N と質問の数 Q、2 行目に毎日の売上 a_i が半角の空白 1 つで区切られて並びます。3 行目から Q 行は、1 行に 1 つの質問です。

出力の形式

Q 行を出力します。k 行目に、k 番目の質問の答えを書きます。

制約

  • N と Q は、どちらも 1 以上 100000 以下です
  • 売上 a_i は、0 以上 1000 以下の整数です
  • 質問は、1 以上 l 以下 r 以下 N 以下を満たします

入力と出力の例

例 1

5 日間の売上が 3、1、4、1、5 です。1 日目から 5 日目までの合計は 14、2 日目から 3 日目までは 1 + 4 で 5、4 日目だけなら 1 です。

入力

5 3
3 1 4 1 5
1 5
2 3
4 4

出力

14
5
1

例 2

1 日だけで、質問も 1 つだけのときです。

入力

1 1
7
1 1

出力

7

ヒント

まだ開いていません

付箋は 3 枚。下の段ほど答えに近づきます

  1. ヒント 2

  2. ヒント 3答えに近い

main.py
import sys

data = sys.stdin.read().split()
n, q = int(data[0]), int(data[1])
sales = list(map(int, data[2:2 + n]))
queries = [(int(data[2 + n + 2 * i]), int(data[3 + n + 2 * i])) for i in range(q)]

# ここから書く

入力

出力

「実行する」を押すと、ここに出力が出ます

できているか「提出して採点」を押すと、隠れたテストを全部走らせて、通ったかをここに出します