관리 메뉴

너와 나의 스토리

[BOJ] 12837 가계부 (Hard) 본문

Algorithm/세그먼트 트리 (Segment Tree)

[BOJ] 12837 가계부 (Hard)

노는게제일좋아! 2019. 9. 11. 13:18
반응형

문제: https://www.acmicpc.net/problem/12837

 

문제 풀이:

입력으로 [1 p x]가 들어오면 index가 p인 곳의 값을 x로 바꿔주고

입력으로 [2 p q]가 들어오면 index p부터 q까지의 합을 출력한다.

 

 

소스 코드:

#include <iostream>
#define sz 1000001*4
using namespace std;

typedef long long ll;
int n, m;
ll seg[sz];

ll update(int pos, int val, int x, int y, int node) {
	if (pos<x || pos>y) return seg[node];
	if (x == y) return seg[node] += val;
	int mid = (x + y) >> 1;
	return seg[node] = update(pos, val, x, mid, node * 2) + update(pos, val, mid + 1, y, node * 2 + 1);
}

ll query(int low,int hi, int x, int y, int node) {
	if (y<low || x>hi) return 0;
	if (low <= x && y <= hi) return seg[node];
	int mid = (x + y) >> 1;
	return query(low,hi, x, mid, node * 2) + query(low,hi, mid + 1, y, node * 2 + 1);
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	
	cin >> n >> m;

	while (m--) {
		int a, b, c;
		cin >> a >> b >> c;
		if (a == 1) {
			update(b, c, 1, n, 1);
		}
		else {
			cout << query(b, c,1, n, 1) << '\n';
		}
	}


	return 0;
}

반응형

'Algorithm > 세그먼트 트리 (Segment Tree)' 카테고리의 다른 글

[BOJ] 1275 커피숍2  (0) 2019.09.11
[BOJ] 1321 군인  (0) 2019.09.10
[BOJ] 2357 최솟값과 최댓값  (0) 2019.09.10
(BOJ) 1849 순열 / 1777 순열복원  (0) 2019.01.19
(BOJ) 5676 음주 코딩  (0) 2019.01.19
Comments