Skip to main content

Compress

Trait Compress 

Source
pub trait Compress<T> {
    // Required method
    fn compressed(&self) -> (Vec<usize>, Vec<T>);
}
Expand description

スライスを大小関係を保った連番へ変換する拡張トレイトです。

Ord を実装する型に利用できます。[T] に実装されているため、ベクタや配列からも スライスとして呼び出せます。

Required Methods§

Source

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".

Implementations on Foreign Types§

Source§

impl<T: Ord + Clone> Compress<T> for [T]

Source§

fn compressed(&self) -> (Vec<usize>, Vec<T>)

Implementors§