diff --git a/g0rnn/README.md b/g0rnn/README.md index 584ca25..9529a76 100644 --- a/g0rnn/README.md +++ b/g0rnn/README.md @@ -31,4 +31,6 @@ | 27차시 | 2025.06.15 | Floyd-Warshall | [케빈 베이컨의 6단계 법칙](https://www.acmicpc.net/problem/1389) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/113 | | 28차시 | 2025.06.27 | BFS | [상어 중학교](https://www.acmicpc.net/problem/21609) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/115 | | 29차시 | 2025.07.22 | combination | [소문난 칠공주](https://www.acmicpc.net/problem/1941) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/119 | +| 30차시 | 2025.07.28 | segment-tree | [커피숍2](https://www.acmicpc.net/problem/1275) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/121 | + --- diff --git a/g0rnn/segment-tree/30-g0rnn.py b/g0rnn/segment-tree/30-g0rnn.py new file mode 100644 index 0000000..3a3a906 --- /dev/null +++ b/g0rnn/segment-tree/30-g0rnn.py @@ -0,0 +1,45 @@ +import sys +input = sys.stdin.readline + +def init(node, start, end): + if start == end: + tree[node] = nums[start] + else: + mid = (start + end) // 2 + init(node * 2, start, mid) + init(node * 2 + 1, mid + 1, end) + tree[node] = tree[node * 2] + tree[node * 2 + 1] + +def update(node, start, end, idx, val): + if start == end: + nums[idx] = val + tree[node] = val + else: + mid = (start + end) // 2 + if start <= idx <= mid: + update(node * 2, start, mid, idx, val) + else: + update(node * 2 + 1, mid + 1, end, idx, val) + tree[node] = tree[node * 2] + tree[node * 2 + 1] + +def query(node, start, end, l, r): + if r < start or end < l: + return 0 + if l <= start and end <= r: + return tree[node] + mid = (start + end) // 2 + return query(node * 2, start, mid, l, r) + query(node * 2 + 1, mid + 1, end, l, r) + +# 입력 +n, q = map(int, input().split()) +nums = [0] + list(map(int, input().split())) ## int는 가변 정수라 long 보다도 커질 수 있음.. 아니 걍 크기제한이 없음 +tree = [0] * (4 * n) + +init(1, 1, n) +for _ in range(q): + x, y, a, b = map(int, input().split()) + l = min(x, y) + r = max(x, y) + + print(query(1, 1, n, l, r)) + update(1, 1, n, a, b) \ No newline at end of file