結果

問題 No.3072 Speedrun Query
ユーザー urectanc
提出日時 2025-03-24 18:51:15
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 111 ms / 2,500 ms
コード長 1,734 bytes
コンパイル時間 13,728 ms
コンパイル使用メモリ 403,124 KB
実行使用メモリ 33,392 KB
最終ジャッジ日時 2025-03-24 18:51:35
合計ジャッジ時間 17,941 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

use std::fmt::Write;
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize, k_a: usize, k_b: usize,
a: [Usize1; k_a],
b: [Usize1; k_b],
q: usize,
query: [(Usize1, Usize1); q],
}
let dist = |a: &[usize]| {
let mut res = vec![!0; n];
let k = a.len();
let mut j = 0;
for i in 0..n {
if j > 0 {
res[i] = res[i].min(i.abs_diff(a[j - 1]));
}
if j < k {
res[i] = res[i].min(i.abs_diff(a[j]));
}
if j < k && i == a[j] {
j += 1;
}
}
res
};
let dist_a = dist(&a);
let dist_b = dist(&b);
let dist_ab = {
let mut mixed = Vec::with_capacity(k_a + k_b);
for &a in &a {
mixed.push((a, true));
}
for &b in &b {
mixed.push((b, false));
}
mixed.sort_unstable_by_key(|t| t.0);
mixed
.windows(2)
.filter_map(|w| {
if w[0].1 != w[1].1 {
Some(w[1].0 - w[0].0)
} else {
None
}
})
.min()
.unwrap()
};
eprintln!("{:?}", dist_ab);
let mut output = String::new();
for (s, t) in query {
let d = s.abs_diff(t);
let d_a = dist_a[s] + dist_a[t];
let d_b = dist_b[s] + dist_b[t];
let d_ab = dist_a[s] + dist_ab + dist_b[t];
let d_ba = dist_b[s] + dist_ab + dist_a[t];
let ans = d.min(d_a).min(d_b).min(d_ab).min(d_ba);
writeln!(&mut output, "{ans}").unwrap();
}
println!("{}", output.trim_end());
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0