pub trait Compress<T> {
// Required method
fn compressed(&self) -> (Vec<usize>, Vec<T>);
}Expand description
スライスを大小関係を保った連番へ変換する拡張トレイトです。
Ord を実装する型に利用できます。[T] に実装されているため、ベクタや配列からも
スライスとして呼び出せます。
Required Methods§
Sourcefn compressed(&self) -> (Vec<usize>, Vec<T>)
fn compressed(&self) -> (Vec<usize>, Vec<T>)
元の値を、重複を除いた昇順列内の順位へ置き換えます。
§Returns
compressed[i] は元の self[i] に対応する 0-indexed の順位です。values[j] は順位
j の元の値で、昇順かつ重複なしです。要素数を N とすると O(N log N) です。
空スライスの場合は、どちらも空のベクタを返します。
§Examples
use atcoder::algorithm::compress::Compress;
let (compressed, values) = [40, 10, 40, 20].compressed();
assert_eq!(compressed, [2, 0, 2, 1]);
assert_eq!(values, [10, 20, 40]);Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".