반응형
문제
https://www.acmicpc.net/problem/2357
소스코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
treesize = 1
while treesize < n:
treesize *= 2
treesize *= 2
tree = [[1e10, -1e10] for _ in range(treesize)]
def build_tree():
for i in range(treesize//2 - 1, 0, -1):
tree[i][0] = min(tree[i * 2][0], tree[i * 2 + 1][0])
tree[i][1] = max(tree[i * 2][1], tree[i * 2 + 1][1])
def get_min_max(s,e):
s += treesize // 2
e += treesize // 2
getmin = tree[s][0]
getmax = tree[s][1]
while s <= e:
if s % 2 == 1:
getmin = min(getmin, tree[s][0])
getmax = max(getmax, tree[s][1])
s += 1
if e % 2 == 0:
getmin = min(getmin, tree[e][0])
getmax = max(getmax, tree[e][1])
e -= 1
s //= 2
e //= 2
return (getmin, getmax)
# 1 <- 0
# 2 3
# 4 5 6 7
for i in range(n):
temp = int(input())
tree[treesize//2 + i][0], tree[treesize//2 + i][1] = temp, temp
# print(tree)
build_tree()
for i in range(m):
a, b = map(int, input().split())
x, y = get_min_max(a - 1, b - 1)
print(x, y)
하나의 노드의 최댓값과 최소값을 저장하는 세그먼트트리 풀이입니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 1753번 최단경로 (1) | 2024.11.20 |
---|---|
[백준/Python] 1275번 커피숍 2 (0) | 2024.11.19 |
[백준/Python] 11505번 구간 곱 구하기 (0) | 2024.11.16 |
[백준/Python] 1219번 오민식의 고민 (1) | 2024.11.15 |
[백준/Python] 20955번 민서의 응급수술 (1) | 2024.11.14 |
댓글