Submission #48036884


Source Code Expand

import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List

import qualified Data.IntMap as IM
import qualified Data.IntSet as IS

main :: IO ()
main = do
  [n,q] <- bsGetLnInts
  as <- bsGetLnInts
  ixs <- replicateM q bsGetLnInts
  let ans = abc330e n q as ixs
  mapM_ print ans

bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine

abc330e :: Int -> Int -> [Int] -> [[Int]] -> [Int]
abc330e n q as ixs = snd $ mapAccumL step (arr0, mis0, mex0) ixs
  where
    arr0 = IM.fromDistinctAscList $ zip [1..] as
    mis0 = fromListMIS as
    mex0 = IS.fromDistinctAscList [0..n + q] IS.\\ IS.fromList as
    step (arr, mis, mex) (i:x:_) = ((arr1, mis1, mex1), IS.findMin mex1)
      where
        ai = arr IM.! i
        arr1 = IM.insert i x arr
        mis1 = insertMIS x $ deleteMIS ai mis
        mex1 = IS.delete x $ if memberMIS ai mis1 then mex else IS.insert ai mex

-- 多重集合
-- @gotoki_no_joe
type MultiIntSet = IM.IntMap Int

fromListMIS :: [Int] -> MultiIntSet
fromListMIS xs = IM.fromListWith (+) [(x, 1) | x <- xs]

insertMIS :: Int -> MultiIntSet -> MultiIntSet
insertMIS x ms = IM.insertWith (+) x 1 ms

deleteMIS :: Int -> MultiIntSet -> MultiIntSet
deleteMIS x ms = IM.update dec x ms
  where
    dec 1 = Nothing
    dec n = Just $ pred n

memberMIS :: Int -> MultiIntSet -> Bool
memberMIS x ms = IM.member x ms

{-
公式解説のやり方。MEXの専用データ構造がなくても、単純な整数集合で補集合を追跡するだけでいい。
-}

Submission Info

Submission Time
Task E - Mex and Update
User joetheshootingst
Language Haskell (GHC 9.4.5)
Score 475
Code Size 1617 Byte
Status AC
Exec Time 1745 ms
Memory 166196 KiB

Compile Error

app/Main.hs:26:5: warning: [-Wincomplete-patterns]
    Pattern match(es) are non-exhaustive
    In an equation for ‘step’:
        Patterns of type ‘(IM.IntMap IS.Key, MultiIntSet, IS.IntSet)’,
                         ‘[IS.Key]’ not matched:
            (_, _, _) []
            (_, _, _) [_]
   |
26 |     step (arr, mis, mex) (i:x:_) = ((arr1, mis1, mex1), IS.findMin mex1)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 1
AC × 35
Set Name Test Cases
Sample sample_01.txt
All hack_01.txt, hack_02.txt, hack_03.txt, hack_04.txt, sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt
Case Name Status Exec Time Memory
hack_01.txt AC 414 ms 115812 KiB
hack_02.txt AC 414 ms 115808 KiB
hack_03.txt AC 555 ms 154964 KiB
hack_04.txt AC 555 ms 154964 KiB
sample_01.txt AC 1 ms 6888 KiB
test_01.txt AC 1 ms 6772 KiB
test_02.txt AC 1 ms 6772 KiB
test_03.txt AC 504 ms 111916 KiB
test_04.txt AC 544 ms 111920 KiB
test_05.txt AC 704 ms 117036 KiB
test_06.txt AC 1255 ms 155892 KiB
test_07.txt AC 1735 ms 166196 KiB
test_08.txt AC 564 ms 111912 KiB
test_09.txt AC 784 ms 119088 KiB
test_10.txt AC 1395 ms 158944 KiB
test_11.txt AC 1745 ms 166152 KiB
test_12.txt AC 454 ms 143864 KiB
test_13.txt AC 605 ms 154932 KiB
test_14.txt AC 1105 ms 158036 KiB
test_15.txt AC 1095 ms 158856 KiB
test_16.txt AC 995 ms 157836 KiB
test_17.txt AC 745 ms 156940 KiB
test_18.txt AC 1315 ms 159056 KiB
test_19.txt AC 1315 ms 160084 KiB
test_20.txt AC 1425 ms 161104 KiB
test_21.txt AC 1075 ms 159068 KiB
test_22.txt AC 1285 ms 159052 KiB
test_23.txt AC 1255 ms 158976 KiB
test_24.txt AC 1255 ms 157996 KiB
test_25.txt AC 1265 ms 159080 KiB
test_26.txt AC 534 ms 135648 KiB
test_27.txt AC 1115 ms 158036 KiB
test_28.txt AC 1115 ms 158036 KiB
test_29.txt AC 594 ms 138484 KiB
test_30.txt AC 1055 ms 156832 KiB