[AtCoder] [經典競程 90 題] 010 - Score Sum Queries(★2)

題目連結:https://atcoder.jp/contests/typical90/tasks/typical90_j
題目大意:
ABC大學有 $N$ 個學生,學號 $i$ 的學生在 $C_i$ 班裡,已知第 $i$ 個學生期末考成績為 $P_i$ 。現在對於 $Q$ 筆詢問 $L_i$, $R_i$,請輸出學號在 $[L_i, R_i]$的學生的成績總和 (分班獨自統計)
算個前綴和就可以 $O(1)$ 回答了。
#include <bits/stdc++.h>
using namespace std;
using lld = int64_t;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	int n; cin >> n;
	vector<lld> a(n), b(n);
	for (int i = 0; i < n; ++i) {
		int op, scr; cin >> op >> scr;
		if (op == 1) {
			a[i] = scr;
		} else {
			b[i] = scr;
		}
	}
	partial_sum(a.begin(), a.end(), a.begin());
	partial_sum(b.begin(), b.end(), b.begin());
	int q; cin >> q;
	while (q--) {
		int l, r; cin >> l >> r;
		--l, --r;
		if (l) cout << a[r] - a[l - 1] << ' ' << b[r] - b[l - 1] << '\n';
		else cout << a[r] << ' ' << b[r] << '\n';
	}
	return 0;
} 

留言

這個網誌中的熱門文章

[NPSC] 2009初賽 E. 檸檬汽水傳說

[TIOJ] 1902. 「殿仁.王,不認識,誰啊?」,然後他就死了……

[AtCoder] [經典競程 90 題] 024 - Select +/- One(★2)