백준 17435 - 합성함수와 쿼리 (Python)
Updated:
sparse table을 활용하는 문제입니다.
sparse table은 모든 계산값을 저장하는 것이 아니라 배로 늘어나는 값들만 저장시켜 계산하기 편하게 해주는 자료구조입니다.
전체 코드
import sys
input = sys.stdin.readline
m = int(input())
f = [0] + list(map(int, input().split()))
dp = [[f[i]] for i in range(m + 1)]
for i in range(1, 19):
for j in range(1, m + 1):
dp[j].append(dp[dp[j][i - 1]][i - 1])
for _ in range(int(input())):
n, x = map(int, input().split())
for i in range(18, -1, -1):
if n >= 1 << i:
n -= 1 << i
x = dp[x][i]
print(x)