fork(3) download
  1. import Data.List
  2. import Data.Maybe ( fromJust )
  3. import qualified Data.ByteString.Lazy.Char8 as BS
  4.  
  5. inversionCnt :: [ Int ] -> [ Int ] -> [ Int ] -> Int -> ( Int , [ Int ] )
  6. inversionCnt [] ys ret cnt = ( cnt , reverse ret ++ ys )
  7. inversionCnt xs [] ret cnt = ( cnt , reverse ret ++ xs )
  8. inversionCnt u@( x : xs ) v@( y : ys ) ret cnt
  9. | x <= y = inversionCnt xs v ( x : ret ) cnt
  10. | otherwise = inversionCnt u ys ( y : ret ) ( cnt + length u )
  11.  
  12. merge :: ( Int , [ Int ] ) -> ( Int , [ Int ] ) -> ( Int , [ Int ] )
  13. merge ( cnt_1 , xs ) ( cnt_2 , ys ) = ( cnt_1 + cnt_2 + cnt , ret ) where
  14. ( cnt , ret ) = inversionCnt xs ys [] 0
  15.  
  16. mergeSort :: [ Int ] -> ( Int , [ Int ] )
  17. mergeSort [ x ] = ( 0 , [ x ] )
  18. mergeSort xs = merge ( mergeSort xs' ) ( mergeSort ys' ) where
  19. ( xs' , ys' ) = splitAt ( div ( length xs ) 2 ) xs
  20.  
  21. main = BS.interact $ ( \x -> BS.pack $ show x ++ "\n" ) . fst
  22. . mergeSort . map ( fst . fromJust . BS.readInt :: BS.ByteString -> Int )
  23. . BS.lines
  24.  
Runtime error #stdin #stdout #stderr 0.16s 11832KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.