Pagini recente » Cod sursa (job #20474) | Cod sursa (job #2328804) | Cod sursa (job #1286422) | Cod sursa (job #2512244) | Cod sursa (job #2276442)
infile = open("stramosi.in", "r")
outfile = open("stramosi.out", "w")
def readnm():
line = infile.readline().split()
return int(line[0]), int(line[1])
def readtree():
line = list(map(int, infile.readline().split()))
for i in range(n):
a[i][0] = line[i]
def get_anc(x, y):
while y:
maxpow = 1
pow = 0
while maxpow <= y:
maxpow *= 2
pow += 1
maxpow = int(maxpow/2)
pow -= 1
x = a[x-1][pow]
if x == 0:
return 0
y -= maxpow
return x
def solve():
for i in range(n):
for j in range(1,19):
if a[i][j-1]:
a[i][j] = a[a[i][j-1]-1][j-1]
for i in range(m):
line = list(map(int, infile.readline().split()))
outfile.write(str(get_anc(line[0], line[1])) + "\n")
infile.close()
outfile.close()
n, m = readnm()
a = [[0 for j in range(19)] for i in range(n)]
readtree()
solve()