pub struct QueueAggregation<M>where
M: Monoid,{ /* private fields */ }
Implementations§
Source§impl<M> QueueAggregation<M>where
M: Monoid,
impl<M> QueueAggregation<M>where
M: Monoid,
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_3_d.rs (line 10)
6pub fn dsl_3_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, l, a: [u64]);
10 let mut que = QueueAggregation::<MinOperation<_>>::new();
11 let mut ans = Vec::with_capacity(n - l + 1);
12 for a in a.take(n) {
13 que.push(a);
14 if que.len() == l {
15 ans.push(que.fold_all());
16 que.pop();
17 }
18 }
19 iter_print!(writer, @it ans);
20}
More examples
crates/aizu_online_judge/src/dsl/dsl_3_a.rs (line 10)
6pub fn dsl_3_a(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, s: u64, a: [u64]);
10 let mut que = QueueAggregation::<AdditiveOperation<_>>::new();
11 let mut ans = usize::MAX;
12 for a in a.take(n) {
13 que.push(a);
14 while que.fold_all() >= s {
15 ans = ans.min(que.len());
16 que.pop();
17 }
18 }
19 writeln!(writer, "{}", if ans == usize::MAX { 0 } else { ans }).ok();
20}
crates/library_checker/src/datastructure/queue_operate_all_composite.rs (line 14)
10pub fn queue_operate_all_composite(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, q);
14 let mut que = QueueAggregation::<LinearOperation<_>>::new();
15 for _ in 0..q {
16 match scanner.scan::<usize>() {
17 0 => {
18 scan!(scanner, ab: (MInt998244353, MInt998244353));
19 que.push(ab);
20 }
21 1 => {
22 que.pop();
23 }
24 2 => {
25 scan!(scanner, x: MInt998244353);
26 let (a, b) = que.fold_all();
27 writeln!(writer, "{}", a * x + b).ok();
28 }
29 _ => panic!("unknown query"),
30 }
31 }
32}
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_3_d.rs (line 14)
6pub fn dsl_3_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, l, a: [u64]);
10 let mut que = QueueAggregation::<MinOperation<_>>::new();
11 let mut ans = Vec::with_capacity(n - l + 1);
12 for a in a.take(n) {
13 que.push(a);
14 if que.len() == l {
15 ans.push(que.fold_all());
16 que.pop();
17 }
18 }
19 iter_print!(writer, @it ans);
20}
More examples
crates/aizu_online_judge/src/dsl/dsl_3_a.rs (line 15)
6pub fn dsl_3_a(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, s: u64, a: [u64]);
10 let mut que = QueueAggregation::<AdditiveOperation<_>>::new();
11 let mut ans = usize::MAX;
12 for a in a.take(n) {
13 que.push(a);
14 while que.fold_all() >= s {
15 ans = ans.min(que.len());
16 que.pop();
17 }
18 }
19 writeln!(writer, "{}", if ans == usize::MAX { 0 } else { ans }).ok();
20}
pub fn is_empty(&self) -> bool
Sourcepub fn fold_all(&self) -> M::T
pub fn fold_all(&self) -> M::T
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_3_d.rs (line 15)
6pub fn dsl_3_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, l, a: [u64]);
10 let mut que = QueueAggregation::<MinOperation<_>>::new();
11 let mut ans = Vec::with_capacity(n - l + 1);
12 for a in a.take(n) {
13 que.push(a);
14 if que.len() == l {
15 ans.push(que.fold_all());
16 que.pop();
17 }
18 }
19 iter_print!(writer, @it ans);
20}
More examples
crates/aizu_online_judge/src/dsl/dsl_3_a.rs (line 14)
6pub fn dsl_3_a(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, s: u64, a: [u64]);
10 let mut que = QueueAggregation::<AdditiveOperation<_>>::new();
11 let mut ans = usize::MAX;
12 for a in a.take(n) {
13 que.push(a);
14 while que.fold_all() >= s {
15 ans = ans.min(que.len());
16 que.pop();
17 }
18 }
19 writeln!(writer, "{}", if ans == usize::MAX { 0 } else { ans }).ok();
20}
crates/library_checker/src/datastructure/queue_operate_all_composite.rs (line 26)
10pub fn queue_operate_all_composite(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, q);
14 let mut que = QueueAggregation::<LinearOperation<_>>::new();
15 for _ in 0..q {
16 match scanner.scan::<usize>() {
17 0 => {
18 scan!(scanner, ab: (MInt998244353, MInt998244353));
19 que.push(ab);
20 }
21 1 => {
22 que.pop();
23 }
24 2 => {
25 scan!(scanner, x: MInt998244353);
26 let (a, b) = que.fold_all();
27 writeln!(writer, "{}", a * x + b).ok();
28 }
29 _ => panic!("unknown query"),
30 }
31 }
32}
pub fn last(&self) -> Option<&M::T>
Sourcepub fn push(&mut self, value: M::T)
pub fn push(&mut self, value: M::T)
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_3_d.rs (line 13)
6pub fn dsl_3_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, l, a: [u64]);
10 let mut que = QueueAggregation::<MinOperation<_>>::new();
11 let mut ans = Vec::with_capacity(n - l + 1);
12 for a in a.take(n) {
13 que.push(a);
14 if que.len() == l {
15 ans.push(que.fold_all());
16 que.pop();
17 }
18 }
19 iter_print!(writer, @it ans);
20}
More examples
crates/aizu_online_judge/src/dsl/dsl_3_a.rs (line 13)
6pub fn dsl_3_a(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, s: u64, a: [u64]);
10 let mut que = QueueAggregation::<AdditiveOperation<_>>::new();
11 let mut ans = usize::MAX;
12 for a in a.take(n) {
13 que.push(a);
14 while que.fold_all() >= s {
15 ans = ans.min(que.len());
16 que.pop();
17 }
18 }
19 writeln!(writer, "{}", if ans == usize::MAX { 0 } else { ans }).ok();
20}
crates/library_checker/src/datastructure/queue_operate_all_composite.rs (line 19)
10pub fn queue_operate_all_composite(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, q);
14 let mut que = QueueAggregation::<LinearOperation<_>>::new();
15 for _ in 0..q {
16 match scanner.scan::<usize>() {
17 0 => {
18 scan!(scanner, ab: (MInt998244353, MInt998244353));
19 que.push(ab);
20 }
21 1 => {
22 que.pop();
23 }
24 2 => {
25 scan!(scanner, x: MInt998244353);
26 let (a, b) = que.fold_all();
27 writeln!(writer, "{}", a * x + b).ok();
28 }
29 _ => panic!("unknown query"),
30 }
31 }
32}
Sourcepub fn pop(&mut self) -> Option<M::T>
pub fn pop(&mut self) -> Option<M::T>
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_3_d.rs (line 16)
6pub fn dsl_3_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, l, a: [u64]);
10 let mut que = QueueAggregation::<MinOperation<_>>::new();
11 let mut ans = Vec::with_capacity(n - l + 1);
12 for a in a.take(n) {
13 que.push(a);
14 if que.len() == l {
15 ans.push(que.fold_all());
16 que.pop();
17 }
18 }
19 iter_print!(writer, @it ans);
20}
More examples
crates/aizu_online_judge/src/dsl/dsl_3_a.rs (line 16)
6pub fn dsl_3_a(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, s: u64, a: [u64]);
10 let mut que = QueueAggregation::<AdditiveOperation<_>>::new();
11 let mut ans = usize::MAX;
12 for a in a.take(n) {
13 que.push(a);
14 while que.fold_all() >= s {
15 ans = ans.min(que.len());
16 que.pop();
17 }
18 }
19 writeln!(writer, "{}", if ans == usize::MAX { 0 } else { ans }).ok();
20}
crates/library_checker/src/datastructure/queue_operate_all_composite.rs (line 22)
10pub fn queue_operate_all_composite(reader: impl Read, mut writer: impl Write) {
11 let s = read_all_unchecked(reader);
12 let mut scanner = Scanner::new(&s);
13 scan!(scanner, q);
14 let mut que = QueueAggregation::<LinearOperation<_>>::new();
15 for _ in 0..q {
16 match scanner.scan::<usize>() {
17 0 => {
18 scan!(scanner, ab: (MInt998244353, MInt998244353));
19 que.push(ab);
20 }
21 1 => {
22 que.pop();
23 }
24 2 => {
25 scan!(scanner, x: MInt998244353);
26 let (a, b) = que.fold_all();
27 writeln!(writer, "{}", a * x + b).ok();
28 }
29 _ => panic!("unknown query"),
30 }
31 }
32}
Trait Implementations§
Source§impl<M> Clone for QueueAggregation<M>where
M: Monoid,
impl<M> Clone for QueueAggregation<M>where
M: Monoid,
Source§impl<M> Debug for QueueAggregation<M>
impl<M> Debug for QueueAggregation<M>
Auto Trait Implementations§
impl<M> Freeze for QueueAggregation<M>
impl<M> RefUnwindSafe for QueueAggregation<M>
impl<M> Send for QueueAggregation<M>
impl<M> Sync for QueueAggregation<M>
impl<M> Unpin for QueueAggregation<M>
impl<M> UnwindSafe for QueueAggregation<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