作者 Anonymous [actionscript] 2012-01-19 12:47 (点击下载)

  1. data SegTr a = Null
  2. | Bin {
  3. l :: Int,
  4. r :: Int,
  5. s :: a,
  6. lt :: SegTr a,
  7. rt :: SegTr a
  8. } deriving (Show)
  9.  
  10. build xs = build' 0 (length xs - 1)
  11. where
  12. build' l r
  13. | l == r = Bin l l (xs !! l) Null Null
  14. | otherwise = Bin l r sum lt rt
  15. where
  16. m = (l + r) `div` 2
  17. lt = build' l m
  18. rt = build' (m + 1) r
  19. sum = s lt + s rt
  20.  
  21. segAdd t @ (Bin l r sum lt rt) l1 r1 x
  22. | (r1 < l) || (r < l1) = t
  23. | l == r = Bin l l (sum + x) lt rt
  24. | otherwise = Bin l r sum' lt' rt'
  25. where
  26. sum' = sum + (r - l + 1) * x
  27. lt' = segAdd lt l1 r1 x
  28. rt' = segAdd rt l1 r1 x
  29.  
  30. segAns t @ (Bin l r sum lt rt) l1 r1
  31. | (r1 < l) || (r < l1) = 0
  32. | l == r = sum
  33. | otherwise = segAns lt l1 r1 + segAns rt l1 r1
  34.  

提交下面的校正或者修改. (点击这里开始一个新的帖子)
姓名: 在 cookie 中记住我的名字

屏幕抓图:(jpeg 或 png)