aydarbiktimirov

Treap

Dec 2nd, 2011
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data Treap key priority = Treap key priority (Treap key priority) (Treap key priority) | EmptyTreap
  2.     deriving (Show, Read)
  3.  
  4. splitTreap EmptyTreap _ = (EmptyTreap, EmptyTreap)
  5. splitTreap (Treap key priority left right) splitKey
  6.     | splitKey < key = (fst leftSplit, Treap key priority (snd leftSplit) right)
  7.     | otherwise = (Treap key priority left (snd rightSplit), fst rightSplit)
  8.         where
  9.             leftSplit = splitTreap left splitKey
  10.             rightSplit = splitTreap right splitKey
  11.  
  12. mergeTreap EmptyTreap t = t
  13. mergeTreap t EmptyTreap = t
  14. mergeTreap t1@(Treap k1 p1 l1 r1) t2@(Treap k2 p2 l2 r2)
  15.     | p1 < p2 = Treap k1 p1 l1 (mergeTreap r1 t2)
  16.     | otherwise = Treap k2 p2 (mergeTreap t1 l2) r2
  17.  
  18. insertTreap EmptyTreap t = t
  19. insertTreap t1@(Treap k1 p1 l1 r1) t2@(Treap k2 p2 l2 r2)
  20.     | p2 < p1 = Treap k2 p2 (fst splitResult) (snd splitResult)
  21.     | k2 < k1 = Treap k1 p1 (insertTreap l1 t2) r1
  22.     | otherwise = Treap k1 p1 l1 (insertTreap r1 t2)
  23.         where
  24.             splitResult = splitTreap t1 k2
  25.  
  26. removeTreap EmptyTreap _ = EmptyTreap
  27. removeTreap (Treap key priority left right) removeKey
  28.     | key == removeKey = mergeTreap left right
  29.     | removeKey < key = Treap key priority (removeTreap left removeKey) right
  30.     | otherwise = Treap key priority left (removeTreap right removeKey)
  31.  
  32. findTreap EmptyTreap _ = Nothing
  33. findTreap (Treap key priority left right) findKey
  34.     | key == findKey = Just (key, priority)
  35.     | findKey < key = findTreap left findKey
  36.     | otherwise = findTreap right findKey
  37.  
  38. buildTreapSimple :: (Ord a, Ord b) => [(a, b)] -> Treap a b
  39. buildTreapSimple = foldl (\x y -> insertTreap x (Treap (fst y) (snd y) EmptyTreap EmptyTreap)) EmptyTreap
Advertisement
Add Comment
Please, Sign In to add comment