Struct librualg::segment_tree::Rsq [−][src]
Range Sum Query
Implementations
impl<T> Rsq<T> where
T: Default + Clone + Copy + Add<Output = T>,
[src]
T: Default + Clone + Copy + Add<Output = T>,
pub fn new(src: &[T]) -> Self
[src]
Build Segment Tree (RSQ) from slice.
use librualg::segment_tree::Rsq; let arr = [1, 2, 3, 4, 5]; let tree = Rsq::new(&arr);
pub fn query(&self, l: usize, r: usize) -> Option<T>
[src]
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);
pub fn update(&mut self, idx: usize, value: T)
[src]
Update value by index
use librualg::segment_tree::Rsq; let arr = [1, 2, 3, 4, 5]; let mut tree = Rsq::new(&arr); assert_eq!(tree.query(0, 4).unwrap(), 15); tree.update(1, 7); assert_eq!(tree.query(0, 4).unwrap(), 20);
Auto Trait Implementations
impl<T> RefUnwindSafe for Rsq<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for Rsq<T> where
T: Send,
T: Send,
impl<T> Sync for Rsq<T> where
T: Sync,
T: Sync,
impl<T> Unpin for Rsq<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Rsq<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,