結果
問題 | No.59 鉄道の旅 |
ユーザー |
|
提出日時 | 2020-10-12 14:57:23 |
言語 | Haskell (9.10.1) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 14,947 bytes |
コンパイル時間 | 543 ms |
コンパイル使用メモリ | 168,192 KB |
最終ジャッジ日時 | 2024-11-14 23:51:48 |
合計ジャッジ時間 | 935 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.8.2/environments/default Main.hs:22:14: warning: [GHC-53692] [-Wdeprecated-flags] -XTypeInType is deprecated: use -XDataKinds and -XPolyKinds instead | 22 | {-# LANGUAGE TypeInType #-} | ^^^^^^^^^^ [1 of 2] Compiling Main ( Main.hs, Main.o ) Main.hs:62:1: error: [GHC-87110] Could not load module ‘Data.IntMap’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 62 | import Data.IntMap (IntMap) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:63:1: error: [GHC-87110] Could not load module ‘Data.IntMap’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 63 | import qualified Data.IntMap as IntMap | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:64:1: error: [GHC-87110] Could not load module ‘Data.IntSet’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 64 | import Data.IntSet (IntSet) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:65:1: error: [GHC-87110] Could not load module ‘Data.IntSet’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 65 | import qualified Data.IntSet as IntSet | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:66:1: error: [GHC-87110] Could not load module ‘Data.Map’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 66 | import Data.Map (Map) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ソースコード
LANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGELANGUAGE{- base -}importControl.ArrowimportControl.MonadimportControl.Monad.STimportControl.Monad.FiximportControl.Monad.IdentityimportData.BitsimportData.BoolimportData.CharimportqualifiedData.ComplexasCimportqualifiedData.FoldableasFimportqualifiedData.ListasLimportData.IORefimportData.IximportqualifiedData.MaybeasMimportData.MonoidimportqualifiedData.OrdasOimportqualifiedData.RatioasRimportData.SemigroupimportData.WordimportGHC.ExtsimportqualifiedSystem.IOasSysIOimportUnsafe.Coerce{- array -}importqualifiedData.ArrayasArrimportqualifiedData.Array.IOasArrIOimportqualifiedData.Array.MArrayasArrMAimportqualifiedData.Array.STasArrSTimportqualifiedData.Array.UnboxedasArrU{- bytestring -}importqualifiedData.ByteStringasBSimportqualifiedData.ByteString.BuilderasBSBimportqualifiedData.ByteString.CharasBSCimportqualifiedData.ByteString.Lazy.CharasBSLCimportqualifiedData.ByteString.ShortasBSSimportqualifiedData.ByteString.UnsafeasBSU{- containers -}importData.IntMapIntMapimportqualifiedData.IntMapasIntMapimportData.IntSetIntSetimportqualifiedData.IntSetasIntSetimportData.MapMapimportqualifiedData.MapasMapimportData.SetSetimportqualifiedData.SetasSet{- deepseq -}importControl.DeepSeq{- integer-gmp -}importqualifiedGHC.Integer.GMP.InternalsasGMPimportqualifiedGHC.Integer.Logarithms.InternalsasLOG{- mtl -}importqualifiedControl.Monad.StateasMState{- time -}importData.Time.Clock.POSIXgetPOSIXTime{- vector -}importqualifiedData.VectorasVimportqualifiedData.Vector.Fusion.Stream.MonadicasVFSMimportqualifiedData.Vector.GenericasVGimportqualifiedData.Vector.Generic.MutableasVGMimportqualifiedData.Vector.MutableasVMimportqualifiedData.Vector.PrimitiveasVPimportqualifiedData.Vector.Primitive.MutableasVPMimportqualifiedData.Vector.UnboxedasVUimportqualifiedData.Vector.Unboxed.MutableasVUM{- vector-algorithms -}-- import qualified Data.Vector.Algorithms.Tim as Tim-- import qualified Data.Vector.Algorithms.Intro as Intro# MOD 1000000007--------------------------------------------------------------------------------- main-------------------------------------------------------------------------------main::IO()main = do[n, k] <- map read . words <$> getLinebit <- newBIT 2000000rep n $ \_ -> dow <- parse1if w > 0then dotemp1 <- bit -|-! 2000000temp2 <- bit -|-! (w - 1)when (temp1 - temp2 < k) $ incBIT w 1 bitelse dolet w' = abs wtemp3 <- bit -|-! w'temp4 <- bit -|-! (w' - 1)when (temp3 - temp4 > 0) $ incBIT w' (-1) bitprint =<< bit -|-! 2000000--------------------------------------------------------------------------------- BinaryIndexedTree-------------------------------------------------------------------------------type BinaryIndexedTree = ArrIO.IOUArray Int IntnewBIT::Int->IOBinaryIndexedTreenewBIT n = ArrMA.newListArray (1, n) $ repeat 0(-|-!)::BinaryIndexedTree->Int->IOInt(-|-!) bit i = f i 0wheref i acc| i < 1 = return acc| otherwise = doacc' <- (+acc) <$> ArrMA.readArray bit ilet i' = i - (i .&. (-i))f i' acc'incBIT::Int->Int->BinaryIndexedTree->IO()incBIT i v bit = do(_, u) <- ArrMA.getBounds bit_func i u v bitwhere_func::ArrMAMArrayabfIxcNumbNumcBitsc=>c->c->b->acb->f()_func z u v bit = when (z <= u) $ doArrMA.writeArray bit z . (+ v) =<< ArrMA.readArray bit z_func (z + (z .&. (-z))) u v bit--------------------------------------------------------------------------------- utils-------------------------------------------------------------------------------fi::Int->Integerfi = fromIntegralINLINEfI::Integer->IntfI = fromIntegerINLINEpowModInt::Int->Int->Int->IntpowModInt a b c = fI $ GMP.powModInteger (fi a) (fi b) (fi c)INLINErecipModInt::Int->Int->IntrecipModInt a m = fI $ GMP.recipModInteger (fi a) (fi m)INLINEinfixl 8 .<<., .>>., .>>>.infixl 6 .^.(.<<.)::Bitsb=>b->Int->b(.<<.) = unsafeShiftLINLINE(.>>.)::Bitsb=>b->Int->b(.>>.) = unsafeShiftRINLINE(.>>>.)::Int->Int->Int(.>>>.) (I# x#) (I# i#) = I# (uncheckedIShiftRL# x# i#)INLINE(.^.) :: Bits b => b -> b -> b(.^.) = xorINLINEstream::Monadm=>Int->Int->VFSMStreammIntstream !l !r = VFSM.Stream step lwherestep x| x < r = return $ VFSM.Yield x (x + 1)| otherwise = return $ VFSM.DoneINLINEINLINErep::Monadm=>Int->Int->m()->m()rep n = flip VFSM.mapM_ (stream 0 n)INLINEstreamR::Monadm=>Int->Int->VFSMStreammIntstreamR !l !r = VFSM.Stream step (r - 1)wherestep x| x >= l = return $ VFSM.Yield x (x - 1)| otherwise = return $ VFSM.DoneINLINEINLINErev::Monadm=>Int->Int->m()->m()rev !n = flip VFSM.mapM_ (streamR 0 n)INLINEstreamStep::Monadm=>Int->Int->Int->VFSMStreammIntstreamStep !l !r !d = VFSM.Stream step lwherestep x| x < r = return $ VFSM.Yield x (x + d)| otherwise = return $ VFSM.DoneINLINEINLINE--------------------------------------------------------------------------------- input-------------------------------------------------------------------------------type Parser a = BSC8.ByteString -> Maybe (a, BSC8.ByteString)parseInt::ParserIntparseInt = fmap (second BSC8.tail) . BSC8.readIntparseChar::IOVUVectorCharparseChar = VU.fromList <$> getLineparse1::IOIntparse1 = readLnparse2::IOIntIntparse2 = (\vec -> (vec VU.! 0, vec VU.! 1)) . VU.unfoldrN 2 parseInt <$> BSC8.getLineparse3::IOIntIntIntparse3 = (\vec -> (vec VU.! 0, vec VU.! 1, vec VU.! 2)) . VU.unfoldrN 3 parseInt <$> BSC8.getLineparse4::IOIntIntIntIntparse4 = (\vec -> (vec VU.! 0, vec VU.! 1, vec VU.! 2, vec VU.! 3)) . VU.unfoldrN 4 parseInt <$> BSC8.getLineparseM::Int->IOVUVectorIntparseM m = VU.unfoldrN m parseInt <$> BSC8.getLineparseN1::Int->IOVUVectorIntparseN1 n = VU.replicateM n parse1parseN2::Int->IOVUVectorIntIntparseN2 n = VU.replicate n <$> parse2parseN3::Int->IOVUVectorIntIntIntparseN3 n = VU.replicate n <$> parse3parseN4::Int->IOVUVectorIntIntIntIntparseN4 n = VU.replicate n <$> parse4parseNM::Int->Int->IOVVectorVUVectorIntparseNM n m = V.replicateM n $ VU.unfoldrN m parseInt <$> BSC8.getLineparseANBN::Int->IOVUVectorIntVUVectorIntparseANBN n = dovectup <- VU.replicateM n $ (\vec -> (vec VU.! 0, vec VU.! 1)) . VU.unfoldr (BSC8.readInt . BSC8.dropWhile isSpace) <$> BSC8.getLinereturn $ VU.unzip vectupparseANBNCN::Int->IOVUVectorIntVUVectorIntVUVectorIntparseANBNCN n = dovectup <- VU.replicateM n $ (\vec -> (vec VU.! 0, vec VU.! 1, vec VU.! 2)) . VU.unfoldr (BSC8.readInt . BSC8.dropWhile isSpace) <$> BSC8.getLinereturn $ VU.unzip3 vectuptype CParser a = MState.StateT BSC8.ByteString Maybe arunCParser::CParsera->BSC8ByteString->MaybeaBSC8ByteStringrunCParser = MState.runStateTINLINEint::CParserIntint = coerce $ BSC8.readInt . BSC8.dropWhile isSpaceINLINEint1::CParserIntint1 = fmap (subtract 1) intINLINEchar::CParserCharchar = coerce BSC8.unconsINLINEbyte::CParserWord8byte = coerce BS.unconsINLINEskipSpaces::CParser()skipSpaces = MState.modify' (BSC8.dropWhile isSpace)INLINEv2BLinesWith::VGVectorvt=>t->BSBBuilder->vt->BSBBuilderv2BLinesWith showFct = VG.foldr (\ a -> (showFct a <>) . (BSB.char7 '\n' <>)) memptyINLINEputBuilder::BSBBuilder->IO()putBuilder = BSB.hPutBuilder SysIO.stdoutINLINEgetVUInt::IOVUVectorIntgetVUInt = VU.unfoldr (BSC8.readInt . BSC8.dropWhile isSpace) <$> BSC8.getLine--------------------------------------------------------------------------------- Mint-------------------------------------------------------------------------------modulus::Numa=>amodulus = MODINLINEinfixr 8 ^%infixl 7 *%, /%infixl 6 +%, -%(+%)::Int->Int->Int(I# x#) +% (I# y#) = case x# +# y# ofr# -> I# (r# -# ((r# >=# MOD#) *# MOD#))INLINE(-%)::Int->Int->Int(I# x#) -% (I# y#) = case x# -# y# ofr# -> I# (r# +# ((r# <# 0#) *# MOD#))INLINE(*%) :: Int -> Int -> Int(I# x#) *% (I# y#) = case timesWord# (int2Word# x#) (int2Word# y#) ofz# -> case timesWord2# z# im# of(# q#, _ #) -> case minusWord# z# (timesWord# q# m#) ofv# | isTrue# (geWord# v# m#) -> I# (word2Int# (plusWord# v# m#))| otherwise -> I# (word2Int# v#)wherem# = int2Word# MOD#im# = plusWord# (quotWord# 0xffffffffffffffff## m#) 1##INLINE(/%)::Int->Int->Int(I# x#) /% (I# y#) = go# y# MOD# 1# 0#wherego# a# b# u# v#| isTrue# (b# ># 0#) = case a# `quotInt#` b# ofq# -> go# b# (a# -# (q# *# b#)) v# (u# -# (q# *# v#))| otherwise = I# ((x# *# (u# +# MOD#)) `remInt#` MOD#)INLINE(^%) :: Int -> Int -> Intx ^% n| n > 0 = go 1 x n| n == 0 = 1| otherwise = go 1 (1 /% x) (-n)wherego !acc !y !m| m .&. 1 == 0 = go acc (y *% y) (unsafeShiftR m 1)| m == 1 = acc *% y| otherwise = go (acc *% y) (y *% y) (unsafeShiftR (m - 1) 1)newtype Mint = Mint { getMint :: Int }deriving newtype (Eq, Ord, Read, Show, Real)mint::Integrala=>a->Mintmint x = fromIntegral $ mod (fromIntegral x) MODINLINEmintValidate::Mint->BoolmintValidate (Mint x) = 0 <= x && x < MODINLINEinstanceBoundedMintwhereminBound = Mint 0maxBound = Mint $ modulus - 1instanceEnumMintwheretoEnum = mintfromEnum = coerceinstanceIntegralMintwherequotRem x y = (x / y, x - x / y * y)toInteger = coerce (toInteger @Int)instanceNumMintwhere(+) = coerce (+%)(-) = coerce (-%)(*) = coerce (*%)abs = idsignum = const (Mint 1)fromInteger x = coerce @Int @Mint . fromInteger $ mod x modulusinstanceFractionalMintwhere(/) = coerce (/%)fromRational q = fromInteger (R.numerator q) / fromInteger (R.denominator q)newtype instanceVUMMVectorsMintMV_MintVUMMVectorsIntnewtype instanceVUVectorMintV_MintVUVectorIntinstanceVUUnboxMintinstanceVGMMVectorVUMMVectorMintwherebasicLength (MV_Mint v) = VGM.basicLength vINLINEbasicUnsafeSlice i n (MV_Mint v) = MV_Mint $ VGM.basicUnsafeSlice i n vINLINEbasicOverlaps (MV_Mint v1) (MV_Mint v2) = VGM.basicOverlaps v1 v2INLINEbasicUnsafeNew n = MV_Mint `fmap` VGM.basicUnsafeNew nINLINEbasicInitialize (MV_Mint v) = VGM.basicInitialize vINLINEbasicUnsafeReplicate n x = MV_Mint `fmap` VGM.basicUnsafeReplicate n (coerce x)INLINEbasicUnsafeRead (MV_Mint v) i = coerce `fmap` VGM.basicUnsafeRead v iINLINEbasicUnsafeWrite (MV_Mint v) i x = VGM.basicUnsafeWrite v i (coerce x)INLINEbasicClear (MV_Mint v) = VGM.basicClear vINLINEbasicSet (MV_Mint v) x = VGM.basicSet v (coerce x)INLINEbasicUnsafeCopy (MV_Mint v1) (MV_Mint v2) = VGM.basicUnsafeCopy v1 v2INLINEbasicUnsafeMove (MV_Mint v1) (MV_Mint v2) = VGM.basicUnsafeMove v1 v2INLINEbasicUnsafeGrow (MV_Mint v) n = MV_Mint `fmap` VGM.basicUnsafeGrow v nINLINEinstanceVGVectorVUVectorMintwherebasicUnsafeFreeze (MV_Mint v) = V_Mint `fmap` VG.basicUnsafeFreeze vINLINEbasicUnsafeThaw (V_Mint v) = MV_Mint `fmap` VG.basicUnsafeThaw vINLINEbasicLength (V_Mint v) = VG.basicLength vINLINEbasicUnsafeSlice i n (V_Mint v) = V_Mint $ VG.basicUnsafeSlice i n vINLINEbasicUnsafeIndexM (V_Mint v) i = coerce `fmap` VG.basicUnsafeIndexM v iINLINEbasicUnsafeCopy (MV_Mint mv) (V_Mint v) = VG.basicUnsafeCopy mv velemseq _ = seqINLINE