iota-0.1.0.0
Safe HaskellNone
LanguageGHC2021

Data.FenwickTree.RangeAdd

Synopsis

Documentation

newtype RangeAddFenwickTree s a Source #

Constructors

RangeAddFenwickTree (MVector s a) 

newRangeAddFenwickTree :: (Num a, Unbox a, PrimMonad m) => Int -> m (RangeAddFenwickTree (PrimState m) a) Source #

buildRangeAddFenwickTree :: (Num a, Unbox a, PrimMonad m) => Vector a -> m (RangeAddFenwickTree (PrimState m) a) Source #

addFromTo :: (Num a, Unbox a, PrimMonad m) => RangeAddFenwickTree (PrimState m) a -> Int -> Int -> a -> m () Source #

readRAFT :: (Num a, Unbox a, PrimMonad m) => RangeAddFenwickTree (PrimState m) a -> Int -> m a Source #

O(log n)

writeRAFT :: (Num a, Unbox a, PrimMonad m) => RangeAddFenwickTree (PrimState m) a -> Int -> a -> m () Source #

O(log n)

lowerBoundRAFT :: (Unbox a, Num a, Ord a, PrimMonad m) => RangeAddFenwickTree (PrimState m) a -> a -> m Int Source #

>>> ft <- buildRangeAddFenwickTree @Int (U.fromList [1,2,2,3,3,3])
>>> lowerBoundRAFT ft 2
1
>>> lowerBoundRAFT ft 0
0
>>> lowerBoundRAFT ft 10
6

upperBoundRAFT :: (Unbox a, Num a, Ord a, PrimMonad m) => RangeAddFenwickTree (PrimState m) a -> a -> m Int Source #

>>> ft <- buildRangeAddFenwickTree @Int (U.fromList [1,2,2,3,3,3])
>>> upperBoundRAFT ft 2
3
>>> upperBoundRAFT ft 0
0
>>> upperBoundRAFT ft 10
6