| Task: | Company Queries II |
| Sender: | aalto26gh_011 |
| Submission time: | 2026-10-17 19:04:19 +0300 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.54 s | details |
| #7 | ACCEPTED | 0.45 s | details |
| #8 | ACCEPTED | 0.48 s | details |
| #9 | ACCEPTED | 0.59 s | details |
| #10 | ACCEPTED | 0.56 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.59 s | details |
Code
#![allow(unused)]
use std::io;
fn take_tuple() -> (usize, usize) {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let mut it = input
.trim()
.split_whitespace()
.map(|x| x.parse::<usize>().unwrap());
(it.next().unwrap(), it.next().unwrap())
}
fn take_vector() -> Vec<usize> {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let arr: Vec<usize> = input
.trim()
.split_whitespace()
.map(|x| x.parse::<usize>().unwrap())
.collect();
return arr;
}
fn main() {
let (n, q): (usize, usize) = take_tuple();
let mut vec = take_vector();
let max_tree: usize = usize::max(n.next_power_of_two().ilog2() as usize, 1);
let mut ancestors: Vec<Vec<usize>> = vec![Vec::with_capacity(n + 1); max_tree];
ancestors[0].push(0);
ancestors[0].push(1);
ancestors[0].append(&mut vec);
for k in 1..max_tree {
for e in 0..n + 1 {
let b_1 = ancestors[k - 1][e];
let b_2 = ancestors[k - 1][b_1];
ancestors[k].push(b_2);
}
}
let mut depths: Vec<usize> = Vec::with_capacity(n + 1);
depths.push(0);
depths.push(1);
for i in 2..ancestors[0].len() {
depths.push(depths[ancestors[0][i]] + 1);
}
for _ in 0..q {
let (mut a, mut b) = take_tuple();
if depths[a] < depths[b] {
std::mem::swap(&mut a, &mut b);
}
let d = depths[a] - depths[b];
for i in 0..ancestors.len() {
if (d >> i) & 1 == 1 {
a = ancestors[i][a];
}
}
if a == b {
println!("{}", a);
continue;
}
for i in (0..ancestors.len()).rev() {
if ancestors[i][a] != ancestors[i][b] {
a = ancestors[i][a];
b = ancestors[i][b];
}
}
println!("{}", ancestors[0][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: ACCEPTED
| 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 |
|---|
| 74862 8750 16237 72298 58111 ... |
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: ACCEPTED
| 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 |
|---|
| 2796 633 633 151 2690 ... |
Test 10
Verdict: ACCEPTED
| 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 |
|---|
| 365 73 103 365 216 ... |
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: ACCEPTED
| 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 |
|---|
| 27468 6353 27468 6353 6353 ... |
