pub struct CompressedSegmentTree<M, X, Inner>where
M: Monoid,{
compress: Vec<X>,
segs: Vec<Inner>,
_marker: PhantomData<fn() -> M>,
}Fields§
§compress: Vec<X>§segs: Vec<Inner>§_marker: PhantomData<fn() -> M>Implementations§
Source§impl<M, X> CompressedSegmentTree<M, X, Tag<M>>
impl<M, X> CompressedSegmentTree<M, X, Tag<M>>
fn merge_1d_coordinates(left: &Self, right: &Self) -> Self
Source§impl<M, T1> CompressedSegmentTree<M, T1, Tag<M>>
impl<M, T1> CompressedSegmentTree<M, T1, Tag<M>>
pub fn new(points: &[(T1,)]) -> Self
fn from_iter<'a, Iter>(points: Iter) -> Self
pub fn fold<Q1>(&self, range: &(Q1,)) -> M::Twhere
Q1: RangeBounds<T1>,
pub fn update(&mut self, key: &(T1,), x: &M::T)
pub fn partition_point_acc<P>(&self, left: &T1, pred: P) -> (Option<&T1>, M::T)
pub fn rpartition_point_acc<P>( &self, right: &T1, pred: P, ) -> (Option<&T1>, M::T)
Source§impl<M, T1, T2> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, Tag<M>>>
impl<M, T1, T2> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, Tag<M>>>
Sourcepub fn new(points: &[(T1, (T2,))]) -> Self
pub fn new(points: &[(T1, (T2,))]) -> Self
Examples found in repository?
crates/library_checker/src/data_structure/point_add_rectangle_sum.rs (line 74)
59pub fn point_add_rectangle_sum_compressed_segment_tree(reader: impl Read, writer: impl Write) {
60 prepare_io!(reader, writer);
61 sc!(n, q, xyw: [(u32, u32, u64); n], queries: [Query; q]);
62 let points: Vec<_> = xyw
63 .iter()
64 .map(|&(x, y, _)| (x, (y,)))
65 .chain(queries.iter().filter_map(|&query| {
66 if let Query::Add { x, y, .. } = query {
67 Some((x, (y,)))
68 } else {
69 None
70 }
71 }))
72 .collect();
73
74 let mut seg = CompressedSegmentTree2d::<AdditiveOperation<u64>, _, _>::new(&points);
75 for &(x, y, w) in &xyw {
76 seg.update(&(x, (y,)), &w);
77 }
78
79 for query in queries {
80 match query {
81 Query::Add { x, y, w } => {
82 seg.update(&(x, (y,)), &w);
83 }
84 Query::Sum { l, d, r, u } => {
85 let ans = seg.fold(&(l..r, (d..u,)));
86 pp!(ans);
87 }
88 }
89 }
90}fn from_iter<'a, Iter>(points: Iter) -> Self
Sourcepub fn fold<Q1, Q2>(&self, range: &(Q1, (Q2,))) -> M::Twhere
Q1: RangeBounds<T1>,
Q2: RangeBounds<T2>,
pub fn fold<Q1, Q2>(&self, range: &(Q1, (Q2,))) -> M::Twhere
Q1: RangeBounds<T1>,
Q2: RangeBounds<T2>,
Examples found in repository?
crates/library_checker/src/data_structure/point_add_rectangle_sum.rs (line 85)
59pub fn point_add_rectangle_sum_compressed_segment_tree(reader: impl Read, writer: impl Write) {
60 prepare_io!(reader, writer);
61 sc!(n, q, xyw: [(u32, u32, u64); n], queries: [Query; q]);
62 let points: Vec<_> = xyw
63 .iter()
64 .map(|&(x, y, _)| (x, (y,)))
65 .chain(queries.iter().filter_map(|&query| {
66 if let Query::Add { x, y, .. } = query {
67 Some((x, (y,)))
68 } else {
69 None
70 }
71 }))
72 .collect();
73
74 let mut seg = CompressedSegmentTree2d::<AdditiveOperation<u64>, _, _>::new(&points);
75 for &(x, y, w) in &xyw {
76 seg.update(&(x, (y,)), &w);
77 }
78
79 for query in queries {
80 match query {
81 Query::Add { x, y, w } => {
82 seg.update(&(x, (y,)), &w);
83 }
84 Query::Sum { l, d, r, u } => {
85 let ans = seg.fold(&(l..r, (d..u,)));
86 pp!(ans);
87 }
88 }
89 }
90}Sourcepub fn update(&mut self, key: &(T1, (T2,)), x: &M::T)
pub fn update(&mut self, key: &(T1, (T2,)), x: &M::T)
Examples found in repository?
crates/library_checker/src/data_structure/point_add_rectangle_sum.rs (line 76)
59pub fn point_add_rectangle_sum_compressed_segment_tree(reader: impl Read, writer: impl Write) {
60 prepare_io!(reader, writer);
61 sc!(n, q, xyw: [(u32, u32, u64); n], queries: [Query; q]);
62 let points: Vec<_> = xyw
63 .iter()
64 .map(|&(x, y, _)| (x, (y,)))
65 .chain(queries.iter().filter_map(|&query| {
66 if let Query::Add { x, y, .. } = query {
67 Some((x, (y,)))
68 } else {
69 None
70 }
71 }))
72 .collect();
73
74 let mut seg = CompressedSegmentTree2d::<AdditiveOperation<u64>, _, _>::new(&points);
75 for &(x, y, w) in &xyw {
76 seg.update(&(x, (y,)), &w);
77 }
78
79 for query in queries {
80 match query {
81 Query::Add { x, y, w } => {
82 seg.update(&(x, (y,)), &w);
83 }
84 Query::Sum { l, d, r, u } => {
85 let ans = seg.fold(&(l..r, (d..u,)));
86 pp!(ans);
87 }
88 }
89 }
90}pub fn partition_point_acc<P, Q2>( &self, left: &T1, inner_ranges: &(Q2,), pred: P, ) -> (Option<&T1>, M::T)
pub fn rpartition_point_acc<P, Q2>( &self, right: &T1, inner_ranges: &(Q2,), pred: P, ) -> (Option<&T1>, M::T)
Source§impl<M, T1, T2, T3> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, CompressedSegmentTree<M, T3, Tag<M>>>>
impl<M, T1, T2, T3> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, CompressedSegmentTree<M, T3, Tag<M>>>>
pub fn new(points: &[(T1, (T2, (T3,)))]) -> Self
fn from_iter<'a, Iter>(points: Iter) -> Self
pub fn fold<Q1, Q2, Q3>(&self, range: &(Q1, (Q2, (Q3,)))) -> M::T
pub fn update(&mut self, key: &(T1, (T2, (T3,))), x: &M::T)
pub fn partition_point_acc<P, Q2, Q3>( &self, left: &T1, inner_ranges: &(Q2, (Q3,)), pred: P, ) -> (Option<&T1>, M::T)
pub fn rpartition_point_acc<P, Q2, Q3>( &self, right: &T1, inner_ranges: &(Q2, (Q3,)), pred: P, ) -> (Option<&T1>, M::T)
Source§impl<M, T1, T2, T3, T4> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, CompressedSegmentTree<M, T3, CompressedSegmentTree<M, T4, Tag<M>>>>>
impl<M, T1, T2, T3, T4> CompressedSegmentTree<M, T1, CompressedSegmentTree<M, T2, CompressedSegmentTree<M, T3, CompressedSegmentTree<M, T4, Tag<M>>>>>
pub fn new(points: &[(T1, (T2, (T3, (T4,))))]) -> Self
fn from_iter<'a, Iter>(points: Iter) -> Selfwhere
T1: 'a,
T2: 'a,
T3: 'a,
T4: 'a,
Iter: IntoIterator<Item = &'a (T1, (T2, (T3, (T4,))))> + Clone,
pub fn fold<Q1, Q2, Q3, Q4>(&self, range: &(Q1, (Q2, (Q3, (Q4,))))) -> M::T
pub fn update(&mut self, key: &(T1, (T2, (T3, (T4,)))), x: &M::T)
pub fn partition_point_acc<P, Q2, Q3, Q4>( &self, left: &T1, inner_ranges: &(Q2, (Q3, (Q4,))), pred: P, ) -> (Option<&T1>, M::T)
pub fn rpartition_point_acc<P, Q2, Q3, Q4>( &self, right: &T1, inner_ranges: &(Q2, (Q3, (Q4,))), pred: P, ) -> (Option<&T1>, M::T)
Trait Implementations§
Source§impl<M, X, Inner> Clone for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> Clone for CompressedSegmentTree<M, X, Inner>
Source§impl<M, X, Inner> Debug for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> Debug for CompressedSegmentTree<M, X, Inner>
Source§impl<M, X, Inner> Default for CompressedSegmentTree<M, X, Inner>where
M: Monoid,
impl<M, X, Inner> Default for CompressedSegmentTree<M, X, Inner>where
M: Monoid,
Source§impl<M, X, Inner> MergeCoordinates<M> for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> MergeCoordinates<M> for CompressedSegmentTree<M, X, Inner>
Auto Trait Implementations§
impl<M, X, Inner> Freeze for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> RefUnwindSafe for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> Send for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> Sync for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> Unpin for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> UnsafeUnpin for CompressedSegmentTree<M, X, Inner>
impl<M, X, Inner> UnwindSafe for CompressedSegmentTree<M, X, Inner>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more