Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data SegTree a b = Empty |
- SegTree { subtL :: SegTree a b
- , segL :: a
- , segR :: a
- , valOnSeg :: b
- , subtR :: SegTree a b
- } deriving Show
- intINF = maxBound::Int
- getVal :: SegTree a Int -> Int
- getVal Empty = intINF
- getVal tree = valOnSeg tree
- buildSegTree :: Int -> Int -> UArray Int Int -> SegTree Int Int
- buildSegTree l r arr
- | l+1==r = SegTree Empty l r (arr!l) Empty
- | otherwise = SegTree left l r (min (getVal left) (getVal right)) right
- where mid = (l + r) `div` 2
- left = buildSegTree l mid arr
- right = buildSegTree mid r arr
- getMin :: Int -> Int -> SegTree Int Int -> Int
- getMin l r Empty = intINF
- getMin l r (SegTree subtl tl tr mn subtr)
- | tl >= r || tr <= l = intINF
- | l <= tl && tr <= r = mn
- | otherwise = min (getMin l r subtl) (getMin l r subtr)
- where mid = (tl+tr) `div` 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement