Longest increasing subsequence: Difference between revisions

Line 458:
 
lis :: Ord a => [a] -> [a]
lis lstxs = runST $ do
let llstlxs = length lstxs
pileTops <- newSTArray (min llstlxs 1, lstxs) []
let bsearchPiles x len = aux 1 len where
aux lo hi | lo > hi = return lo
Line 477:
readArray pileTops (i-1)
return $ if i == len+1 then len+1 else len
len <- foldM f 0 lstxs
return . reverse =<< readArray pileTops len
where newSTArray :: Ix i => (i,i) -> e -> ST s (STArray s i e)