import Data.List
import Data
.Maybe ( fromJust
) import qualified Data.ByteString.Lazy.Char8 as BS
inversionCnt
[] ys ret cnt
= ( cnt
, reverse ret
++ ys
)inversionCnt xs
[] ret cnt
= ( cnt
, reverse ret
++ xs
)inversionCnt u@( x : xs ) v@( y : ys ) ret cnt
| x <= y = inversionCnt xs v ( x : ret ) cnt
merge ( cnt_1 , xs ) ( cnt_2 , ys ) = ( cnt_1 + cnt_2 + cnt , ret ) where
( cnt , ret ) = inversionCnt xs ys [] 0
mergeSort [ x ] = ( 0 , [ x ] )
mergeSort xs = merge ( mergeSort xs' ) ( mergeSort ys' ) where
. mergeSort
. map ( fst . fromJust
. BS
.readInt
:: BS
.ByteString
-> Int )
aW1wb3J0IERhdGEuTGlzdAppbXBvcnQgRGF0YS5NYXliZSAoIGZyb21KdXN0ICkKaW1wb3J0IHF1YWxpZmllZCBEYXRhLkJ5dGVTdHJpbmcuTGF6eS5DaGFyOCBhcyBCUwogCmludmVyc2lvbkNudCA6OiBbIEludCBdIC0+IFsgSW50IF0gLT4gWyBJbnQgXSAtPiBJbnQgLT4gKCBJbnQgLCBbIEludCBdICkKaW52ZXJzaW9uQ250IFtdIHlzICByZXQgIGNudCA9ICggY250ICwgcmV2ZXJzZSByZXQgKysgeXMgKQppbnZlcnNpb25DbnQgeHMgW10gIHJldCAgY250ID0gKCBjbnQgLCByZXZlcnNlIHJldCArKyB4cyApCmludmVyc2lvbkNudCB1QCggeCA6IHhzICkgdkAoIHkgOiB5cyApICByZXQgIGNudAogICAgICB8IHggPD0geSA9IGludmVyc2lvbkNudCB4cyB2ICAoICB4IDogcmV0ICAgKSAgIGNudAogICAgICB8IG90aGVyd2lzZSA9IGludmVyc2lvbkNudCB1IHlzICAoIHkgOiByZXQgKSAgKCBjbnQgKyBsZW5ndGggdSApIAogCm1lcmdlIDo6ICAoIEludCAsIFsgSW50IF0gKSAtPiAoIEludCAsIFsgSW50IF0gKSAtPiAoIEludCAsIFsgSW50IF0gKQptZXJnZSAoIGNudF8xICwgeHMgKSAoIGNudF8yICwgeXMgKSA9ICggY250XzEgKyBjbnRfMiArIGNudCAsIHJldCApIHdoZXJlCiAgICAgICAgKCBjbnQgLCByZXQgKSA9IGludmVyc2lvbkNudCB4cyB5cyBbXSAgIDAKIAptZXJnZVNvcnQgOjogIFsgSW50IF0gLT4gKCBJbnQgLCBbIEludCBdICkKbWVyZ2VTb3J0IFsgeCBdID0gKCAwICwgWyB4IF0gKQptZXJnZVNvcnQgIHhzICAgPSBtZXJnZSAoIG1lcmdlU29ydCB4cycgKSAoIG1lcmdlU29ydCB5cycgKSB3aGVyZQogICAgICAgICAgICggeHMnICwgeXMnICkgPSBzcGxpdEF0ICggZGl2ICggbGVuZ3RoIHhzICkgMiApIHhzCiAgICAgICAgICAgCm1haW4gPSAgQlMuaW50ZXJhY3QgJCAoIFx4IC0+IEJTLnBhY2sgJCBzaG93IHggKysgIlxuIiApIC4gZnN0CiAgICAgICAgLiAgbWVyZ2VTb3J0IC4gbWFwICggZnN0IC4gZnJvbUp1c3QgLiAgQlMucmVhZEludCA6OiBCUy5CeXRlU3RyaW5nIC0+IEludCAgKQogICAgICAgIC4gQlMubGluZXMKIA==