use std::collections::BTreeSet; use proconio::input; const INF: i64 = 10_i64.pow(10); fn main() { input! { n: usize, mut xy: [(i64, i64); n], } xy.sort_unstable(); let mut min_d = INF; let mut set1 = BTreeSet::<(i64, usize)>::new(); let mut set2 = BTreeSet::<(i64, usize)>::from_iter(xy.iter().enumerate().map(|(i, v)| (v.1, i))); for (i, &(_, y)) in xy.iter().enumerate() { let d1 = if i == 0 { 0 } else { let min_y = set1.first().unwrap().0; let max_y = set1.last().unwrap().0; xy[i - 1].0 - xy[0].0 + max_y - min_y }; let d2 = { let min_y = set2.first().unwrap().0; let max_y = set2.last().unwrap().0; xy[n - 1].0 - xy[i].0 + max_y - min_y }; min_d = min_d.min(d1.max(d2)); set1.insert((y, i)); set2.remove(&(y, i)); } println!("{min_d}"); }