+-누적합 문제이다.

값의 변경을 일일이 배열에 체킹해주면 터지게 된다. 때문에 이를 +-누적합을 통해 구해줄 수 있다.

  • ground : 첫 값이 들어가있는 배열
  • arr : "+ -" 체킹 배열
  • sum : 최종적으로 몇 만큼 변경해야하는지 들어있는 배열
#include <cstdio>

using namespace std;
typedef long long LL;

int sum[100001];
int arr[100002];
int ground[100002];

int main() {
	int n, m, a, b, c;
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &ground[i]);
	}

	for (int i = 0; i < m; i++) {
		scanf("%d %d %d", &a, &b, &c);
		arr[a] += c;
		arr[b + 1] -= c;
	}

	for (int i = 1; i <= n; i++) 
		sum[i] = sum[i - 1] + arr[i];
	
	for (int i = 1; i <= n; i++) {
		ground[i] += sum[i];
		printf("%d ", ground[i]);
	}
	return 0;
}
 

19951번: 태상이의 훈련소 생활

2020년 5월 14일 논산훈련소에 입대한 태상이는 첫 총기 훈련에서 가스 조절기를 잃어버리는 중대한 실수를 범했다. 그로 인해, 태상이는 조교들에게 눈총을 받게 되었다. 조교들은 태상이에게 연

www.acmicpc.net

 

'책장 > 알고리즘' 카테고리의 다른 글

[백준-3020] 개똥벌레  (0) 2021.10.01
[백준-14391] 종이조각  (0) 2021.10.01
[백준-10800] 컬러볼  (0) 2021.09.30
[백준-10986] 나머지 합  (0) 2021.09.29