pub struct RangeFoldWithUpperBound<K, M>where
M: AbelianGroup,{
keys: Vec<K>,
weights: Vec<M::T>,
queries: Vec<(Range<usize>, K)>,
}Expand description
Offline range folds over entries whose keys are at most a query bound.
Fields§
§keys: Vec<K>§weights: Vec<M::T>§queries: Vec<(Range<usize>, K)>Implementations§
Source§impl<K, M> RangeFoldWithUpperBound<K, M>
impl<K, M> RangeFoldWithUpperBound<K, M>
Sourcepub fn new(values: impl IntoIterator<Item = (K, M::T)>) -> Self
pub fn new(values: impl IntoIterator<Item = (K, M::T)>) -> Self
Examples found in repository?
crates/library_checker/src/data_structure/static_range_sum_with_upper_bound.rs (line 13)
8pub fn static_range_sum_with_upper_bound(reader: impl Read, writer: impl Write) {
9 prepare_io!(reader, writer);
10 sc!(n, q, a: [u32; iter n]);
11 type M = (AdditiveOperation<i64>, AdditiveOperation<i64>);
12 let mut fold: RangeFoldWithUpperBound<_, M> =
13 RangeFoldWithUpperBound::new(a.map(|a| (a, (1, i64::from(a)))));
14 for _ in 0..q {
15 sc!(l, r, x: u32);
16 fold.query(l..r, x);
17 }
18 pp!(@ittup fold.execute());
19}Sourcepub fn query(&mut self, range: Range<usize>, upper_bound: K) -> usize
pub fn query(&mut self, range: Range<usize>, upper_bound: K) -> usize
Examples found in repository?
crates/library_checker/src/data_structure/static_range_sum_with_upper_bound.rs (line 16)
8pub fn static_range_sum_with_upper_bound(reader: impl Read, writer: impl Write) {
9 prepare_io!(reader, writer);
10 sc!(n, q, a: [u32; iter n]);
11 type M = (AdditiveOperation<i64>, AdditiveOperation<i64>);
12 let mut fold: RangeFoldWithUpperBound<_, M> =
13 RangeFoldWithUpperBound::new(a.map(|a| (a, (1, i64::from(a)))));
14 for _ in 0..q {
15 sc!(l, r, x: u32);
16 fold.query(l..r, x);
17 }
18 pp!(@ittup fold.execute());
19}Sourcepub fn execute(self) -> Vec<M::T>
pub fn execute(self) -> Vec<M::T>
Examples found in repository?
crates/library_checker/src/data_structure/static_range_sum_with_upper_bound.rs (line 18)
8pub fn static_range_sum_with_upper_bound(reader: impl Read, writer: impl Write) {
9 prepare_io!(reader, writer);
10 sc!(n, q, a: [u32; iter n]);
11 type M = (AdditiveOperation<i64>, AdditiveOperation<i64>);
12 let mut fold: RangeFoldWithUpperBound<_, M> =
13 RangeFoldWithUpperBound::new(a.map(|a| (a, (1, i64::from(a)))));
14 for _ in 0..q {
15 sc!(l, r, x: u32);
16 fold.query(l..r, x);
17 }
18 pp!(@ittup fold.execute());
19}Auto Trait Implementations§
impl<K, M> Freeze for RangeFoldWithUpperBound<K, M>
impl<K, M> RefUnwindSafe for RangeFoldWithUpperBound<K, M>where
Vec<K>: RefUnwindSafe,
Vec<<M as Magma>::T>: RefUnwindSafe,
Vec<(Range<usize>, K)>: RefUnwindSafe,
impl<K, M> Send for RangeFoldWithUpperBound<K, M>
impl<K, M> Sync for RangeFoldWithUpperBound<K, M>
impl<K, M> Unpin for RangeFoldWithUpperBound<K, M>
impl<K, M> UnsafeUnpin for RangeFoldWithUpperBound<K, M>
impl<K, M> UnwindSafe for RangeFoldWithUpperBound<K, M>
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