pub struct RangeChminChmaxAdd<T> { /* private fields */ }
Implementations§
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 23)
10pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, n, q, a: [Saturating<i64>; n]);
14 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
15 a.iter()
16 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
17 .collect(),
18 );
19 for _ in 0..q {
20 match scanner.scan::<usize>() {
21 0 => {
22 scan!(scanner, l, r, b: Saturating<i64>);
23 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
24 }
25 1 => {
26 scan!(scanner, l, r, b: Saturating<i64>);
27 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
28 }
29 2 => {
30 scan!(scanner, l, r, b: Saturating<i64>);
31 seg.update(l..r, RangeChminChmaxAdd::add(b));
32 }
33 3 => {
34 scan!(scanner, l, r);
35 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
36 }
37 _ => panic!("unknown query"),
38 }
39 }
40}
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 27)
10pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, n, q, a: [Saturating<i64>; n]);
14 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
15 a.iter()
16 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
17 .collect(),
18 );
19 for _ in 0..q {
20 match scanner.scan::<usize>() {
21 0 => {
22 scan!(scanner, l, r, b: Saturating<i64>);
23 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
24 }
25 1 => {
26 scan!(scanner, l, r, b: Saturating<i64>);
27 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
28 }
29 2 => {
30 scan!(scanner, l, r, b: Saturating<i64>);
31 seg.update(l..r, RangeChminChmaxAdd::add(b));
32 }
33 3 => {
34 scan!(scanner, l, r);
35 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
36 }
37 _ => panic!("unknown query"),
38 }
39 }
40}
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 31)
10pub fn range_chmin_chmax_add_range_sum(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, n, q, a: [Saturating<i64>; n]);
14 let mut seg = LazySegmentTree::<RangeSumRangeChminChmaxAdd<Saturating<i64>>>::from_vec(
15 a.iter()
16 .map(|&a| RangeSumRangeChminChmaxAdd::single(a, Saturating(1)))
17 .collect(),
18 );
19 for _ in 0..q {
20 match scanner.scan::<usize>() {
21 0 => {
22 scan!(scanner, l, r, b: Saturating<i64>);
23 seg.update(l..r, RangeChminChmaxAdd::chmin(b));
24 }
25 1 => {
26 scan!(scanner, l, r, b: Saturating<i64>);
27 seg.update(l..r, RangeChminChmaxAdd::chmax(b));
28 }
29 2 => {
30 scan!(scanner, l, r, b: Saturating<i64>);
31 seg.update(l..r, RangeChminChmaxAdd::add(b));
32 }
33 3 => {
34 scan!(scanner, l, r);
35 writeln!(writer, "{}", seg.fold(l..r).sum).ok();
36 }
37 _ => panic!("unknown query"),
38 }
39 }
40}
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: 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: 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> 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