for
文を回す処理を 回やる問題
問題概要
個の整数からなる数列 が与えられる。次の 回のクエリに答えよ。
【クエリ】
整数 が与えられる。 を に変更したときの、 の値を答えよ。(なお、クエリごとに変更は引き継がれない。)
考えたこと
色んな実現方法が考えられるが、ここでは次のような関数を実装することにした。
// T[P] を X に変更したときの T の総和 int calc(vector<int> T, int P, int X) { int sum = 0; T[P] = X; for (int i = 0; i < T.size(); i++) sum += T[i]; return sum; }
このような関数化のメリットの一つとして、関数内部で T
を変更しても、関数の外では変更されない。(逆に関数の外でも変更されて欲しかったら参照渡しを使おう。)
この関数 calc()
を用いて、次のコードのように書ける。
コード
#include <bits/stdc++.h> using namespace std; int calc(vector<int> T, int P, int X) { int sum = 0; T[P] = X; for (int i = 0; i < T.size(); i++) sum += T[i]; return sum; } int main() { int N, M, P, X; cin >> N; vector<int> T(N); for (int i = 0; i < N; i++) cin >> T[i]; cin >> M; for (int _ = 0; _ < M; _++) { cin >> P >> X, P--; // 0 始まりに直す cout << calc(T, P, X) << endl; } }