アルゴリズムと数学 082

https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_bn

終了時刻でソートすればよいです。

// Interval Scheduling Problem
#![allow(non_snake_case)]


//////////////////// 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, i32)> {
    let N: usize = read();
    let intervals: Vec<(i32, i32)> = (0..N).map(|_| read_vec()).
                                            map(|v| (v[0], v[1])).collect();
    intervals
}

fn f(mut intervals: Vec<(i32, i32)>) -> i32 {
    intervals.sort_by_key(|i| i.1);
    let mut counter: i32 = 0;
    let mut last: i32 = 0;
    for (start, end) in intervals.into_iter() {
        if start >= last {
            counter += 1;
            last = end
        }
    }
    counter
}

fn main() {
    let intervals = read_input();
    println!("{}", f(intervals))
}