https://atcoder.jp/contests/abc446/tasks/abc446_d
その値が最後となる列で最も長いものの長さを保持しておけばよいです。
// Max Straight #![allow(non_snake_case)] use std::cmp::max; use std::collections::HashMap; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwrap() } fn read_vec<T: std::str::FromStr>() -> Vec<T> { read::<String>().split_whitespace() .map(|e| e.parse().ok().unwrap()).collect() } //////////////////// process //////////////////// fn read_input() -> Vec<i32> { let _N: usize = read(); let A: Vec<i32> = read_vec(); A } fn F(A: Vec<i32>) -> usize { let N = A.len(); let mut max_len: HashMap<i32, usize> = HashMap::new(); for i in 0..N { let n = *max_len.get(&(A[i]-1)).unwrap_or(&0); let e = max_len.entry(A[i]).or_insert(0); *e = max(*e, n+1) } *max_len.values().max().unwrap() } fn main() { let A = read_input(); println!("{}", F(A)) }