atcoder 競プロ典型90問 010 - Score Sum Queries
2022.06.17

問題

pythonコード

python
n = int(input())
cps = [list(map(int, input().split())) for cp in range(n)]
q = int(input())
lrs = [list(map(int, input().split())) for lr in range(q)]
 
## a組とb組とする
a_sums = []
a = 0
b_sums = []
b = 0
for cp in cps:
    if cp[0] == 1: 
        a += cp[1]
        a_sums.append(a)
        b_sums.append(b)
    else:
        b += cp[1]
        b_sums.append(b)
        a_sums.append(a)
 
for lr in lrs:
    start = 0 if lr[0] - 2 < 0 else a_sums[lr[0] - 2]
    ans_a = a_sums[lr[1]-1] - start
    start = 0 if lr[0] - 2 < 0 else b_sums[lr[0] - 2]
    ans_b = b_sums[lr[1]-1] - start  
    print(ans_a, ans_b)

ポイント

  • 学籍番号i番目までの1組(ここではa組)と2組(ここではb組)の和を配列で持っておく(a_sums, b_sums)
  • L_j〜R_jまでの和 = R_jまでの和 - L_j-1までの和