pub struct SubmaskRangeQuery { /* private fields */ }
Implementations§
Source§impl SubmaskRangeQuery
impl SubmaskRangeQuery
pub fn new(bit_width: u32) -> Self
Sourcepub fn new_with_queries(
queries: impl IntoIterator<Item = (QueryKind, u32)> + ExactSizeIterator + Clone,
) -> Self
pub fn new_with_queries( queries: impl IntoIterator<Item = (QueryKind, u32)> + ExactSizeIterator + Clone, ) -> Self
Examples found in repository?
crates/competitive/src/data_structure/submask_range_query.rs (lines 154-157)
153 pub fn solve(self) -> Vec<G::T> {
154 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
155 Query::Get { m } => (QueryKind::Get, *m),
156 Query::Update { m, .. } => (QueryKind::Update, *m),
157 }));
158 let out_size = self
159 .query
160 .iter()
161 .filter(|q| matches!(q, Query::Get { .. }))
162 .count();
163 let mut out = Vec::with_capacity(out_size);
164 let mut data = vec![G::unit(); 1 << s.bit_width];
165 for q in self.query {
166 match q {
167 Query::Get { m } => {
168 let mut f = G::unit();
169 let mut g = G::unit();
170 for (k, inv) in s.get_query(m) {
171 if inv {
172 G::operate_assign(&mut g, &data[k as usize]);
173 } else {
174 G::operate_assign(&mut f, &data[k as usize]);
175 }
176 }
177 out.push(G::rinv_operate(&f, &g));
178 }
179 Query::Update { m, x } => {
180 for k in s.update_query(m) {
181 G::operate_assign(&mut data[k as usize], &x);
182 }
183 }
184 }
185 }
186 out
187 }
pub fn builder<G>() -> SubmaskRangeQueryBuilder<G>where
G: Group,
Sourcepub fn get_query(&self, m: u32) -> impl Iterator<Item = (u32, bool)>
pub fn get_query(&self, m: u32) -> impl Iterator<Item = (u32, bool)>
Examples found in repository?
crates/competitive/src/data_structure/submask_range_query.rs (line 170)
153 pub fn solve(self) -> Vec<G::T> {
154 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
155 Query::Get { m } => (QueryKind::Get, *m),
156 Query::Update { m, .. } => (QueryKind::Update, *m),
157 }));
158 let out_size = self
159 .query
160 .iter()
161 .filter(|q| matches!(q, Query::Get { .. }))
162 .count();
163 let mut out = Vec::with_capacity(out_size);
164 let mut data = vec![G::unit(); 1 << s.bit_width];
165 for q in self.query {
166 match q {
167 Query::Get { m } => {
168 let mut f = G::unit();
169 let mut g = G::unit();
170 for (k, inv) in s.get_query(m) {
171 if inv {
172 G::operate_assign(&mut g, &data[k as usize]);
173 } else {
174 G::operate_assign(&mut f, &data[k as usize]);
175 }
176 }
177 out.push(G::rinv_operate(&f, &g));
178 }
179 Query::Update { m, x } => {
180 for k in s.update_query(m) {
181 G::operate_assign(&mut data[k as usize], &x);
182 }
183 }
184 }
185 }
186 out
187 }
Sourcepub fn update_query(&self, m: u32) -> impl Iterator<Item = u32>
pub fn update_query(&self, m: u32) -> impl Iterator<Item = u32>
Examples found in repository?
crates/competitive/src/data_structure/submask_range_query.rs (line 180)
153 pub fn solve(self) -> Vec<G::T> {
154 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
155 Query::Get { m } => (QueryKind::Get, *m),
156 Query::Update { m, .. } => (QueryKind::Update, *m),
157 }));
158 let out_size = self
159 .query
160 .iter()
161 .filter(|q| matches!(q, Query::Get { .. }))
162 .count();
163 let mut out = Vec::with_capacity(out_size);
164 let mut data = vec![G::unit(); 1 << s.bit_width];
165 for q in self.query {
166 match q {
167 Query::Get { m } => {
168 let mut f = G::unit();
169 let mut g = G::unit();
170 for (k, inv) in s.get_query(m) {
171 if inv {
172 G::operate_assign(&mut g, &data[k as usize]);
173 } else {
174 G::operate_assign(&mut f, &data[k as usize]);
175 }
176 }
177 out.push(G::rinv_operate(&f, &g));
178 }
179 Query::Update { m, x } => {
180 for k in s.update_query(m) {
181 G::operate_assign(&mut data[k as usize], &x);
182 }
183 }
184 }
185 }
186 out
187 }
Trait Implementations§
Source§impl Clone for SubmaskRangeQuery
impl Clone for SubmaskRangeQuery
Source§fn clone(&self) -> SubmaskRangeQuery
fn clone(&self) -> SubmaskRangeQuery
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 Debug for SubmaskRangeQuery
impl Debug for SubmaskRangeQuery
impl Copy for SubmaskRangeQuery
Auto Trait Implementations§
impl Freeze for SubmaskRangeQuery
impl RefUnwindSafe for SubmaskRangeQuery
impl Send for SubmaskRangeQuery
impl Sync for SubmaskRangeQuery
impl Unpin for SubmaskRangeQuery
impl UnwindSafe for SubmaskRangeQuery
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