愉快な仲間たち
{slice}::first_chunk()(1.77){slice}::last_chunk()(1.77)
使い方
last().is_some_or() などでやっていたようなことを、複数要素でもできますね!?
例
提出: https://atcoder.jp/contests/colopl2018-final/submissions/74666486
use proconio::input; fn main() { input! { n: usize, a: [i64; n], } let mut lines = vec![]; for (a2, b2) in a.iter().zip(0..).map(|(&a, i)| (-2 * i, i * i + a)) { while lines .last_chunk() .is_some_and(|&[(a0, b0), (a1, b1)]| (a1 - a0) * (b2 - b0) - (a2 - a0) * (b1 - b0) > 0) { lines.pop().unwrap(); } lines.push((a2, b2)); } let mut lines = &lines[..]; for i in 0..n as i64 { while lines .first_chunk() .is_some_and(|&[(a0, b0), (a1, b1)]| a0 * i + b0 > a1 * i + b1) { lines = &lines[1..]; } let &(x, y) = lines.first().unwrap(); let ans = x * i + y + i * i; println!("{ans}"); } }