dsalgo 0.2.6

A package for Datastructures and Algorithms.
Documentation
// use crate::{abstract_traits, bitset};
// pub struct SparseTable<S> {
//     data: Vec<Vec<S>>,
// }

// impl<S: abstract_traits::Semigroup + Idempotent>
// SparseTable<S> where S::Identity: Clone {
//     pub fn new(arr: &Vec<S>) -> Self {
//         assert!(sg.idempotent && sg.commutative);
//         let n = a.len();
//         assert!(n > 0);
//         let k = std::cmp::max(1, bitset::bit_length(n - 1));
//         let mut data = vec![vec![S::default(); n]; k];
//         data[0] = a.clone();
//         for i in 0..k - 1 {
//             data[i + 1] = data[i].clone();
//             for j in 0..n - (1 << i) {
//                 data[i + 1][j] =
//                     (sg.operate)(&data[i][j], &data[i][j +
// (1 << i)])             }
//         }
//         Self {
//             sg: sg,
//             data: data,
//         }
//     }

//     pub fn get(&self, l: usize, r: usize) -> S {
//         assert!(l < r && r <= self.data[0].len());
//         if r - l == 1 {
//             return self.data[0][l].clone();
//         }
//         let k = bitset::bit_length(r - 1 - l) - 1;
//         (self.sg.operate)(&self.data[k][l], &self.data[k][r
// - (1 << k)])     }
// }