Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

The Smallest Window I

For a given array $a_1, a_2, a_3, ... , a_N$ of $N$ elements and an integer $S$, find the smallest sub-array size (smallest window length) where the sum of the sub-array is greater than or equal to $S$. If there is not such sub-array, report 0.

Constraints

$1 \leq N \leq 10^5$

$1 \leq S \leq 10^9$

$1 \leq a_i \leq 10^4$

Input

The input is given in the following format.

$N$ $S$

$a_1$ $a_2$ ... $a_N$

Output

Print the smallest sub-array size in a line.

Sample Input 1

6 4
1 2 1 2 3 2

Sample Output 1

2

Sample Input 2

6 6
1 2 1 2 3 2

Sample Output 2

3

Sample Input 3

3 7
1 2 3

Sample Output 3

0

Solution in Haskell (judge verdict: Time Limit Exceeded)

import Control.Applicative
import Data.List

main :: IO ()
main = do
        [n,s] <- map read.words<$>getLine
        list <- map read.words<$>getLine
        printResult $ calcSmallestWindow list s

calcSmallestWindow :: [Int] -> Int -> Maybe Int
--calcSmallestWindow list n = minimum'.filter (/= 0).map (smallest n).tails $ list
--calcSmallestWindow list n = minimum'. foldr (f.smallest n) [].tails $ list
--    where f a b = if a /= 0 then a : b
--                            else b
calcSmallestWindow list n = foldr f' Nothing .tails $ list
    where filter0 a b = if a /= 0 then a:b else b
          f' a b  = case ((filter0.smallest n) a [], b) of
                        ([], Nothing) -> Nothing
                        ([a], Nothing) -> Just a
                        ([], Just x)   -> Just x
                        ([a], Just x)  -> Just (a `min` x)

smallest :: Int -> [Int] -> Int
smallest n list = small 0 0 n list

small acc len n []  = 0
small acc len n (x:xs)
    | acc+x < n = small (acc+x) (len+1) n xs
    | acc+x >= n = len+1

minimum' [] = Nothing
minimum' xs = Just $ minimum xs

printResult Nothing = print 0
printResult (Just n) = print n