概要
累積和って言うらしい。知らんくても思いつくだろう。要するにいちいち計算するんじゃなくて、一気にまとめておいて後から計算するって話。
use proconio::input;
fn main() {
input! {
: usize,
n: [[usize; 2]; n],
cp: usize,
q: [[usize; 2]; q],
lr}
// storageは累積和を格納する
// つまり、storage[i][0]はC_i番目の出席番号までの1組の期末点数の合計
let mut storage = vec![];
let mut tmp = vec![0,0];
for i in 0..n {
if cp[i][0] == 1 {
0] += cp[i][1];
tmp[} else {
1] += cp[i][1];
tmp[}
.push(tmp.clone());
storage}
for i in 0..q {
let l = lr[i][0] - 1;
let r = lr[i][1] - 1;
let mut ans = vec![0,0];
if l > 0 {
0] = storage[r][0] - storage[l-1][0];
ans[1] = storage[r][1] - storage[l-1][1];
ans[} else {
0] = storage[r][0];
ans[1] = storage[r][1];
ans[}
println!("{} {}", ans[0], ans[1]);
}
}