Open3
Rust 競プロ snippet
proconio
use proconio::input;
#[allow(unused_imports)]
use proconio::marker::{Bytes, Chars, Isize1, Usize1};
input!
マクロはほぼ確実に使うのに対し,各 marker は使うとは限らないので allow(unused_imports)
を付けておくという考え.
#[allow(dead_code)]
fn update<T: PartialOrd>(value: T, target: &mut T, cond: std::cmp::Ordering) {
if value.partial_cmp(target) == Some(cond) {
*target = value;
}
}
#[allow(unused_macros)]
macro_rules! chmax {
($target:expr, $value:expr) => {
update($value, &mut $target, std::cmp::Ordering::Greater)
};
}
#[allow(unused_macros)]
macro_rules! chmin {
($target:expr, $value:expr) => {
update($value, &mut $target, std::cmp::Ordering::Less)
};
}
chmax!(x, y)
,chmin!(x, y)
.更新される変数が x
で,更新に用いられる値が y
.ライフタイムとかはあんまり気にしなくていい.
使用例
let mut v = vec![1, 2, 3, 4];
chmax!(v[0], v[2]);
chmin!(v[3], v[1]);
assert_eq!(v, [3, 2, 3, 2]);