세그먼트 트리 예제 - 2
문제 분석
손으로 풀어보기
슈도코드
n(수의 개수) m(질의 개수)
treeSize = 1
while 2^treeSize < n:
treeSize += 1
leafNodeStartIndex = pow(2, treeSize)
tree(인덱스 트리 저장 리스트)
tree 리스트의 리프 노드 영역에 데이터 입력
setTree(index):
while 인덱스가 루트가 아닐 때까지:
if 트리[인덱스/2] 값보다 트리[인덱스]가 더 작으면
트리[인덱스/2] = 트리[인덱스]
인덱스 1 감소
setTree(tree 리스트 길이 - 1)
getMin(시작 인덱스, 종료 인덱스):
min(범위의 최솟값을 나타내는 변수, 처음에는 MAX로 초기화)
while 시작 인덱스 <= 종료 인덱스:
if 시작 인덱스 % 2 == 1:
min = min(min, 트리[현재 인덱스])
시작 인덱스 1 증가
if 종료 인덱스 % 2 == 0
min = min(min, 트리[현재 인덱스])
종료 인덱스 1 감소
시작 인덱스 /= 2
종료 인덱스 /= 2
min 리턴
for m 반복:
s(시작 인덱스) e(종료 인덱스)
print(getMin(트리에서 시작 인덱스, 트리에서 종료 인덱스))코드 구현 - 파이썬
코드 구현 - 자바
Last updated