//尺取法通常是指对数组保存一对下标(起点,终点)然后根据实际情况交替推进两个端点直到得到答案的方法。
//题意:给定长度n的数列整数a0,a1,...an-1以及整数s求出总和不小S的连续子序列的长度的最小值
//算法复杂度O(nlgn)
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_N 100006
int n,S;
int a[MAX_N<span style="font-family: Arial, Helvetica, sans-serif;">]; </span>
int sum[MAX_N+1];
void solve(){
for(int i=0;i<n;++i){
sum[i+1]=sum[i]+a[i];
}
if(sum[n]<S){
puts("0");
return;
}
int res=n;
for(int s=0;sum[s]+S<=sum[n];++s){
int t=lower_bound(sum+s,sum+n,sum[s]+S)-sum;//二分搜索
res=min(res,t-s);
}
printf("%d\n",res);
}
void solve(){
int res = n+1;
int s = 0,t=0,sum = 0;
for(;;){
while(t<n&&sum<S){
sum+=a[t++];
}
if (sum<S)
break;
res = min(res,t-s);
sum-=a[s++];
}
if (res>n)
res = 0;
printf("%d\n",res);
}