Skip to content

Latest commit

 

History

History
60 lines (48 loc) · 929 Bytes

010.md

File metadata and controls

60 lines (48 loc) · 929 Bytes

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';
	}
}