BOJ 19951 C++
문제 접근
N과 똑같은 길이의 배열을 하나 더 만듭니다.
명령들을 한번에 수행하기 의하여 누적합 알고리즘을 이용합니다.
{0,0,0,0,0} 1 ~ 5까지 3만큼을 덮으라고 명령합니다.
{3,0,0,-3,0} 이렇게 해줍니다. 이유는 다음과 같습니다.
누적합을 사용하면
{3,3,3,0,0}
이런식으로 되겠죠.
코드
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, m; cin >> n >> m;
vector<int> v(n + 1, 0);
for (int i = 1; i <= n; i++)
cin >> v[i];
vector<int> com(n + 2, 0);
int a, b, h;
for (int i = 0; i < m; i++)
{
cin >> a >> b >> h;
com[a] += h;
com[b + 1] -= h;
}
for (int i = 1; i <= n; i++)
com[i] = com[i] + com[i - 1];
for (int i = 1; i <= n; i++)
{
cout << v[i] + com[i] << " ";
}
return 0;
}
Leave a comment