pub struct Rsq<T: Default + Clone + Copy + Add<Output = T>> { /* private fields */ }
Expand description
Range Sum Query
Implementations§
Source§impl<T> Rsq<T>
impl<T> Rsq<T>
Sourcepub fn new(src: &[T]) -> Self
pub fn new(src: &[T]) -> Self
Build Segment Tree (RSQ) from slice.
use librualg::segment_tree::Rsq;
let arr = [1, 2, 3, 4, 5];
let tree = Rsq::new(&arr);
Sourcepub fn query(&self, l: usize, r: usize) -> Option<T>
pub fn query(&self, l: usize, r: usize) -> Option<T>
Returns the sum on the interval l to r
use librualg::segment_tree::Rsq;
let arr = [1, 2, 3, 4, 5];
let tree = Rsq::new(&arr);
assert_eq!(tree.query(0, 4).unwrap(), 15);
assert_eq!(tree.query(1, 4).unwrap(), 14);
assert_eq!(tree.query(4, 1).unwrap(), 14);
assert_eq!(tree.query(3, 1).unwrap(), 9);
assert_eq!(tree.query(3, 11), None);
Auto Trait Implementations§
impl<T> Freeze for Rsq<T>
impl<T> RefUnwindSafe for Rsq<T>where
T: RefUnwindSafe,
impl<T> Send for Rsq<T>where
T: Send,
impl<T> Sync for Rsq<T>where
T: Sync,
impl<T> Unpin for Rsq<T>where
T: Unpin,
impl<T> UnwindSafe for Rsq<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