pub struct SubmaskRangeQuery {
bit_width: u32,
mask: [u32; 3],
}Fields§
§bit_width: u32§mask: [u32; 3]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 153-156)
152 pub fn solve(self) -> Vec<G::T> {
153 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
154 Query::Get { m } => (QueryKind::Get, *m),
155 Query::Update { m, .. } => (QueryKind::Update, *m),
156 }));
157 let out_size = self
158 .query
159 .iter()
160 .filter(|q| matches!(q, Query::Get { .. }))
161 .count();
162 let mut out = Vec::with_capacity(out_size);
163 let mut data = vec![G::unit(); 1 << s.bit_width];
164 for q in self.query {
165 match q {
166 Query::Get { m } => {
167 let mut f = G::unit();
168 let mut g = G::unit();
169 for (k, inv) in s.get_query(m) {
170 if inv {
171 G::operate_assign(&mut g, &data[k as usize]);
172 } else {
173 G::operate_assign(&mut f, &data[k as usize]);
174 }
175 }
176 out.push(G::rinv_operate(&f, &g));
177 }
178 Query::Update { m, x } => {
179 for k in s.update_query(m) {
180 G::operate_assign(&mut data[k as usize], &x);
181 }
182 }
183 }
184 }
185 out
186 }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 169)
152 pub fn solve(self) -> Vec<G::T> {
153 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
154 Query::Get { m } => (QueryKind::Get, *m),
155 Query::Update { m, .. } => (QueryKind::Update, *m),
156 }));
157 let out_size = self
158 .query
159 .iter()
160 .filter(|q| matches!(q, Query::Get { .. }))
161 .count();
162 let mut out = Vec::with_capacity(out_size);
163 let mut data = vec![G::unit(); 1 << s.bit_width];
164 for q in self.query {
165 match q {
166 Query::Get { m } => {
167 let mut f = G::unit();
168 let mut g = G::unit();
169 for (k, inv) in s.get_query(m) {
170 if inv {
171 G::operate_assign(&mut g, &data[k as usize]);
172 } else {
173 G::operate_assign(&mut f, &data[k as usize]);
174 }
175 }
176 out.push(G::rinv_operate(&f, &g));
177 }
178 Query::Update { m, x } => {
179 for k in s.update_query(m) {
180 G::operate_assign(&mut data[k as usize], &x);
181 }
182 }
183 }
184 }
185 out
186 }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 179)
152 pub fn solve(self) -> Vec<G::T> {
153 let s = SubmaskRangeQuery::new_with_queries(self.query.iter().map(|q| match q {
154 Query::Get { m } => (QueryKind::Get, *m),
155 Query::Update { m, .. } => (QueryKind::Update, *m),
156 }));
157 let out_size = self
158 .query
159 .iter()
160 .filter(|q| matches!(q, Query::Get { .. }))
161 .count();
162 let mut out = Vec::with_capacity(out_size);
163 let mut data = vec![G::unit(); 1 << s.bit_width];
164 for q in self.query {
165 match q {
166 Query::Get { m } => {
167 let mut f = G::unit();
168 let mut g = G::unit();
169 for (k, inv) in s.get_query(m) {
170 if inv {
171 G::operate_assign(&mut g, &data[k as usize]);
172 } else {
173 G::operate_assign(&mut f, &data[k as usize]);
174 }
175 }
176 out.push(G::rinv_operate(&f, &g));
177 }
178 Query::Update { m, x } => {
179 for k in s.update_query(m) {
180 G::operate_assign(&mut data[k as usize], &x);
181 }
182 }
183 }
184 }
185 out
186 }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