개발/백준
[백준] 19951번. 태상이의 훈련소 생활 (C++)
yun000
2025. 2. 20. 23:10
문제
https://www.acmicpc.net/problem/19951
풀이
[누적합]
sum+=prefixSum[i] 이기 때문에
prefixSum의 시작점(예를들어 1번의 -3) 끝점(예를 들어 6번의 +3)에만 값들을 지정해 주면 된다.
시작점의 위치는 0부터 시작하게 했으므로 prefixSum[a - 1] += k;
끝점은 a~b에 k값을 더해야 하기 때문에 b-1이 아닌 b이다. prefixSum[b] -= k;
코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
//INPUT
int N, M, a, b, k;
cin >> N >> M;
vector<int>ground(N, 0);
for (int i = 0; i < N; i++) {
cin >> ground[i];
}
vector<int>prefixSum(N+1, 0);
for (int i = 0; i < M; i++) {
cin >> a >> b >> k;
prefixSum[a - 1] += k;
prefixSum[b] -= k;
}
//CALCULATE
int sum=0;
for (int i = 0; i < N; i++) {
sum += prefixSum[i];
cout << ground[i] + sum << " ";
}
return 0;
}