Submission details
Task:Company Queries II
Sender:francden
Submission time:2025-10-12 20:00:57 +0300
Language:Python3 (PyPy3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.04 sdetails
#4ACCEPTED0.04 sdetails
#5ACCEPTED0.04 sdetails
#6--details
#7ACCEPTED0.67 sdetails
#8ACCEPTED0.92 sdetails
#9--details
#10--details
#11ACCEPTED0.04 sdetails
#12--details

Code

n,q = [int(x) for x in input().split()]

d_ancestor = [int(x) for x in input().split()]
k=2
ancestors = []
ancestors.append([0,0]+d_ancestor)
flag = True

depth = [0,0]
for i in range(2,n+1):
    depth.append(depth[d_ancestor[i-2]]+1)

while flag:
    L=[]
    flag = False
    for i in range(n+1):
        anc = ancestors[-1][ancestors[-1][i]]
        L.append(ancestors[-1][ancestors[-1][i]])
        if anc !=0:
            flag = True
    ancestors.append(L)

def ancestor(node,depth):
    c_node  = node
    
    for index,val in enumerate(bin(depth)[:1:-1]):
        if val =="1":
            c_node = ancestors[index][c_node]

    return c_node

for querie in range(q) :
    a,b = [int(x) for x in input().split()]
    if a == 1 or b == 1:
        print(1)

    else:
        diff_depth = depth[a]-depth[b]        
        if diff_depth!=0:
            if diff_depth<0:
                b = ancestor(b,-diff_depth)
            else :
                a = ancestor(a,diff_depth)
        if a == b:
            print(a)
        else:
            anc_a = d_ancestor[a-2] 
            anc_b = d_ancestor[b-2] 
            while anc_a != anc_b:
                anc_a = d_ancestor[anc_a-2] 
                anc_b = d_ancestor[anc_b-2]
            print(anc_a)

Test details

Test 1

Verdict: ACCEPTED

input
10 10
1 2 3 4 5 6 7 8 9
6 9
8 10
10 3
...

correct output
6
8
3
1
8
...

user output
6
8
3
1
8
...

Test 2

Verdict: ACCEPTED

input
10 10
1 1 1 1 1 1 1 1 1
1 7
3 4
4 1
...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 3

Verdict: ACCEPTED

input
10 10
1 1 1 1 2 3 4 4 1
1 8
2 7
8 3
...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 4

Verdict: ACCEPTED

input
10 10
1 1 3 1 2 2 5 3 9
7 2
7 6
3 9
...

correct output
2
2
3
1
1
...

user output
2
2
3
1
1
...

Test 5

Verdict: ACCEPTED

input
10 10
1 2 3 2 5 3 2 2 4
6 1
1 3
1 9
...

correct output
1
1
1
2
2
...

user output
1
1
1
2
2
...

Test 6

Verdict:

input
200000 200000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
74862
8750
16237
72298
58111
...

user output
(empty)

Test 7

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 8

Verdict: ACCEPTED

input
200000 200000
1 2 1 2 3 2 1 6 3 1 10 12 13 4...

correct output
1
2
2
2
1
...

user output
1
2
2
2
1
...

Test 9

Verdict:

input
200000 200000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
2796
633
633
151
2690
...

user output
(empty)

Test 10

Verdict:

input
200000 200000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
365
73
103
365
216
...

user output
(empty)

Test 11

Verdict: ACCEPTED

input
2 4
1
1 1
1 2
2 1
...

correct output
1
1
1
2

user output
1
1
1
2

Test 12

Verdict:

input
200000 200000
1 1 2 3 4 5 6 7 8 9 10 11 12 1...

correct output
27468
6353
27468
6353
6353
...

user output
(empty)