010 - Score Sum Queries (★2) 解答 #include <iostream> #include <vector> int main() { // N 人の生徒 int N; std::cin >> N; // 1 組生徒の点数の累積和 std::vector<int> c1 = { 0 }; // 2 組生徒の点数の累積和 std::vector<int> c2 = { 0 }; // 累積和を構築 for (int i = 0; i < N; ++i) { // C 組, P 点 int C, P; std::cin >> C >> P; if (C == 1) // 1 組なら { c1.push_back(c1.back() + P); c2.push_back(c2.back()); } else // 2 組なら { c1.push_back(c1.back()); c2.push_back(c2.back() + P); } } // Q 個の質問 int Q; std::cin >> Q; for (int i = 0; i < Q; ++i) { // L ~ R 番 int L, R; std::cin >> L >> R; // 1 組の L ~ R 番の合計 const int a1 = (c1[R] - c1[L - 1]); // 2 組の L ~ R 番の合計 const int a2 = (c2[R] - c2[L - 1]); // 解答を出力 std::cout << a1 << ' ' << a2 << '\n'; } }