https://atcoder.jp/contests/abc273/tasks/abc273_c
groupbyが使えれば簡単ですが、itertools::Itertoolsにgroup_byというのがありますね。
あと、fにVecをmutableで渡すとめんどうなので、渡す前にsortします。
// (K+1)-th Largest Number #![allow(non_snake_case)] use itertools::Itertools; 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() } fn read_input() -> Vec<usize> { let _N: usize = read(); let A = read_vec(); A } fn f(A: Vec<usize>) { let N = A.len(); let mut counter: usize = 0; for (_k, v) in &A.into_iter().group_by(|&e| e) { counter += 1; println!("{}", v.map(|_| 1).sum::<usize>()) } for _ in counter..N { println!("0") } } fn main() { let mut A = read_input(); A.sort_by(|a, b| b.cmp(&a)); f(A) }