competitive-hpp 0.10.23

Competitive Programming Library for AtCoder with Rust
Documentation
use std::collections::{BTreeMap, BTreeSet};

pub trait BTreeMapUtils<T, U> {
    fn min_elem(&self) -> Option<(&T, &U)>;
    fn max_elem(&self) -> Option<(&T, &U)>;
}

impl<T, U> BTreeMapUtils<T, U> for BTreeMap<T, U> {
    fn min_elem(&self) -> Option<(&T, &U)> {
        self.iter().next()
    }
    fn max_elem(&self) -> Option<(&T, &U)> {
        self.iter().next_back()
    }
}

pub trait BTreeSetUtils<T> {
    fn min_elem(&self) -> Option<&T>;
    fn max_elem(&self) -> Option<&T>;
}

impl<T> BTreeSetUtils<T> for BTreeSet<T> {
    fn min_elem(&self) -> Option<&T> {
        self.iter().next()
    }
    fn max_elem(&self) -> Option<&T> {
        self.iter().next_back()
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn btree_map_test() {
        let tree: BTreeMap<i32, i32> = maplit::btreemap! { 1 => 1, 3 => 3, 2 => 2 };

        assert_eq!(tree.min_elem(), Some((&1, &1)));
        assert_eq!(tree.max_elem(), Some((&3, &3)));
    }

    #[test]
    fn btree_set_test() {
        let set: BTreeSet<i32> = maplit::btreeset! { 1, 3, 2 };

        assert_eq!(set.min_elem(), Some(&1));
        assert_eq!(set.max_elem(), Some(&3));
    }
}