AtCoder Beginner Contest 273 C

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)
}