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 C (judge verdict: Time Limit Exceeded)

#include <stdio.h>


void SimSelSort(int num[ ], int n,int S);
int select(int num[ ], int n,int S);


int main(void){
  int a[100000]={};
  int N;
  int S;
  int b;
  int i=0;

  scanf("%d",&N);

  scanf("%d",&S);

   if(N>100000||S>1000000000){
    printf("Too Large\n");
  }

  for(i;i<N;i++){

   scanf("%d",&a[i]);
   if(a[i]>10000){
    printf("Too Large\n");
    }

  }
  //SimSelSort(a,N,S);

   
  a[i]=select(a,N,S);
  
}



void SimSelSort(int num[ ], int n,int S)
{
  int i, j, k, min, temp;
  int time=0;
  int sum=0;

    for (i = 0; i < n - 1; i++) {
        min = num[i];                
        k = i;                       
        for (j = i + 1; j < n; j++) {
            if (num[j] < min) {      
                min = num[j];        
                k = j;                
            }
        }                             
        temp = num[i];                
        num[i] = num[k];
        num[k] = temp;
    }
  
    for(n; 0<n; --n){
      
      time++;
      sum += num[n-1];

      if(S<=sum){
	printf("%d\n",time);
	break;
      }else if(n==0){

      printf("0\n");


      }    
       
    }  
       
     if(n==0){

      printf("0\n");


      }   

}
int  select(int num[ ], int n,int S){

  int i=1;
  int c=0;
  int sum=0;
  int b=0;
  int d=0;

  sum=num[0];

  if(sum>=S){
        
	printf("%d\n",i);
        return 0;
      }
  sum=0;

  for(i=1;i<=n;++i){
    
    while(b<n-i+1){
    for(c=b+i-1,d=c;d-i<c;--c){
      sum +=num[c];
     
      if(sum>=S){
	printf("%d\n",i);
        return 0;
      }
      //printf("%d %d %d i%d\n",num[c],num[c+1],num[c+2],i);
      }
      b++;
      sum=0;
    }
     b=0;

  }

	printf("0\n");
        return 0;


}