Struct CartesianTree

Source
pub struct CartesianTree<'a, T: Ord> { /* private fields */ }
Expand description

A cartesian tree is a heap ordered binary tree derived from some underlying array. An in-order traversal of the tree yields the underlying array.

Implementations§

Source§

impl<'a, T: Ord> CartesianTree<'a, T>

Source

pub fn in_order_traversal(&self) -> Vec<&T>

Source

pub fn cartesian_tree_number(&self) -> u64

Calculates the cartesian tree number of this tree using the sequence of push and pop operations stored in the action_profile. Note that calculating this value only makes sense when the underlying array is small. More specifically, this procedure assumes that the underlying array has at most 32 items. This makes sense in our context since we’re mostly interested in the cartesian tree numbers of RMQ blocks

Trait Implementations§

Source§

impl<'a, T: Debug + Ord> Debug for CartesianTree<'a, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T: Ord> From<&'a [T]> for CartesianTree<'a, T>

Source§

fn from(underlying: &'a [T]) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'a, T> Freeze for CartesianTree<'a, T>

§

impl<'a, T> RefUnwindSafe for CartesianTree<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for CartesianTree<'a, T>
where T: Sync,

§

impl<'a, T> Sync for CartesianTree<'a, T>
where T: Sync,

§

impl<'a, T> Unpin for CartesianTree<'a, T>

§

impl<'a, T> UnwindSafe for CartesianTree<'a, T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.