pub struct RangeChminChmaxAdd<T> {
lb: T,
ub: T,
bias: T,
}Fields§
§lb: T§ub: T§bias: TImplementations§
Source§impl<T> RangeChminChmaxAdd<T>
impl<T> RangeChminChmaxAdd<T>
Sourcepub fn chmin(x: T) -> Self
pub fn chmin(x: T) -> Self
Examples found in repository?
crates/library_checker/src/data_structure/range_chmin_chmax_add_range_sum.rs (line 32)
19pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
20 let s = read_all_unchecked(reader);
21 let mut scanner = Scanner::new(&s);
22 scan!(scanner, n, q, a: [Saturating<i64>; n]);
23 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
24 a.iter()
25 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
26 .collect(),
27 );
28 for _ in 0..q {
29 scan!(scanner, query: Query);
30 match query {
31 Query::Chmin { l, r, b } => {
32 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
33 }
34 Query::Chmax { l, r, b } => {
35 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
36 }
37 Query::Add { l, r, b } => {
38 seg.update(l..r, RangeChminChmaxAdd::add(b));
39 }
40 Query::Sum { l, r } => {
41 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
42 }
43 }
44 }
45}Sourcepub fn chmax(x: T) -> Self
pub fn chmax(x: T) -> Self
Examples found in repository?
crates/library_checker/src/data_structure/range_chmin_chmax_add_range_sum.rs (line 35)
19pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
20 let s = read_all_unchecked(reader);
21 let mut scanner = Scanner::new(&s);
22 scan!(scanner, n, q, a: [Saturating<i64>; n]);
23 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
24 a.iter()
25 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
26 .collect(),
27 );
28 for _ in 0..q {
29 scan!(scanner, query: Query);
30 match query {
31 Query::Chmin { l, r, b } => {
32 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
33 }
34 Query::Chmax { l, r, b } => {
35 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
36 }
37 Query::Add { l, r, b } => {
38 seg.update(l..r, RangeChminChmaxAdd::add(b));
39 }
40 Query::Sum { l, r } => {
41 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
42 }
43 }
44 }
45}Sourcepub fn add(x: T) -> Self
pub fn add(x: T) -> Self
Examples found in repository?
crates/library_checker/src/data_structure/range_chmin_chmax_add_range_sum.rs (line 38)
19pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
20 let s = read_all_unchecked(reader);
21 let mut scanner = Scanner::new(&s);
22 scan!(scanner, n, q, a: [Saturating<i64>; n]);
23 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
24 a.iter()
25 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
26 .collect(),
27 );
28 for _ in 0..q {
29 scan!(scanner, query: Query);
30 match query {
31 Query::Chmin { l, r, b } => {
32 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
33 }
34 Query::Chmax { l, r, b } => {
35 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
36 }
37 Query::Add { l, r, b } => {
38 seg.update(l..r, RangeChminChmaxAdd::add(b));
39 }
40 Query::Sum { l, r } => {
41 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
42 }
43 }
44 }
45}Trait Implementations§
Source§impl<T: Clone> Clone for RangeChminChmaxAdd<T>
impl<T: Clone> Clone for RangeChminChmaxAdd<T>
Source§fn clone(&self) -> RangeChminChmaxAdd<T>
fn clone(&self) -> RangeChminChmaxAdd<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T: Debug> Debug for RangeChminChmaxAdd<T>
impl<T: Debug> Debug for RangeChminChmaxAdd<T>
Source§impl<T> Magma for RangeChminChmaxAdd<T>
impl<T> Magma for RangeChminChmaxAdd<T>
Source§impl<T> MonoidAct for RangeChminChmaxAdd<T>
impl<T> MonoidAct for RangeChminChmaxAdd<T>
type Key = T
type Act = RangeChminChmaxAdd<T>
type ActMonoid = RangeChminChmaxAdd<T>
fn act(x: &Self::Key, a: &Self::Act) -> Self::Key
fn act_assign(x: &mut Self::Key, a: &Self::Act)
fn unit() -> Self::Act
fn operate(x: &Self::Act, y: &Self::Act) -> Self::Act
fn operate_assign(x: &mut Self::Act, y: &Self::Act)
Source§impl<T: PartialEq> PartialEq for RangeChminChmaxAdd<T>
impl<T: PartialEq> PartialEq for RangeChminChmaxAdd<T>
Source§impl<T> Unital for RangeChminChmaxAdd<T>
impl<T> Unital for RangeChminChmaxAdd<T>
impl<T> Associative for RangeChminChmaxAdd<T>
impl<T: Copy> Copy for RangeChminChmaxAdd<T>
impl<T: Eq> Eq for RangeChminChmaxAdd<T>
impl<T> StructuralPartialEq for RangeChminChmaxAdd<T>
Auto Trait Implementations§
impl<T> Freeze for RangeChminChmaxAdd<T>where
T: Freeze,
impl<T> RefUnwindSafe for RangeChminChmaxAdd<T>where
T: RefUnwindSafe,
impl<T> Send for RangeChminChmaxAdd<T>where
T: Send,
impl<T> Sync for RangeChminChmaxAdd<T>where
T: Sync,
impl<T> Unpin for RangeChminChmaxAdd<T>where
T: Unpin,
impl<T> UnsafeUnpin for RangeChminChmaxAdd<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for RangeChminChmaxAdd<T>where
T: UnwindSafe,
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