// verification-helper: PROBLEM https://yukicoder.me/problems/no/705 pub use __cargo_equip::prelude::*; use larsch_simple::larsch; use proconio::{fastout, input}; #[fastout] fn main() { input! { n: usize, a: [i64; n], x: [i64; n], y: [i64; n], } let cube = |x: i64| x.abs().pow(3); let w = |j, i| cube(a[i - 1] - x[j]) + cube(y[j]); let f = |i, j, &x: &i64| x + w(j, i); let min = larsch(n, f, 0); let res = min[n].0; println!("{}", res); } // The following code was expanded by `cargo-equip`. /// # Bundled libraries /// /// - `larsch_simple 0.1.0 (path+████████████████████████████████████████████)` published in **missing** licensed under `CC0-1.0` as `crate::__cargo_equip::crates::larsch_simple` #[cfg_attr(any(), rustfmt::skip)] #[allow(unused)] mod __cargo_equip { pub(crate) mod crates { pub mod larsch_simple {pub fn larsch(n:usize,mut f:impl FnMut(usize,usize,&T)->T,init:T,)->Vec<(T,usize)>{let mut min=(0..n+1).map(|_|(None,0)).collect::>();min[0]=(Some(init),0);check(n,0,&mut f,&mut min);solve(0,n,&mut f,&mut min);min.into_iter().map(|(x,j)|(x.unwrap(),j)).collect()}fn check(i:usize,j:usize,f:&mut impl FnMut(usize,usize,&T)->T,min:&mut[(Option,usize)],){let x=f(i,j,min[j].0.as_ref().unwrap());if min[i].0.is_none()||min[i].0.as_ref().unwrap()>&x{min[i]=(Some(x),j);}}fn solve(l:usize,r:usize,f:&mut impl FnMut(usize,usize,&T)->T,min:&mut[(Option,usize)],){if l+1>=r{return;}let m=(l+r)/2;for j in min[l].1..=min[r].1{check(m,j,f,min);}solve(l,m,f,min);for j in l+1..=m{check(r,j,f,min);}solve(m,r,f,min);}} } pub(crate) mod macros { pub mod larsch_simple {} } pub(crate) mod prelude {pub use crate::__cargo_equip::crates::*;} mod preludes { pub mod larsch_simple {} } }