题意
求出序列中连续元素之和大于或等于S的子序列的最小长度。
思路
尺取。
代码
#include <stdio.h>
long long a[1000001];
int T,n;
long long s;
int check(int x)
{
for (int i=x;i<=n;++i)
if (a[i]-a[i-x]>=s) return 1;
return 0;
}
int main()
{
for (scanf("%d",&T);T--;)
{
scanf("%d%lld",&n,&s);
for (int i=1;i<=n;++i) scanf("%d",&a[i]),a[i]+=a[i-1];
int l=1,r=n,mid;
while (l<r)
{
mid=(l+r)>>1;
if (check(mid)) r=mid;
else l=mid+1;
}
if (check(l)) printf("%d\n",l);
else printf("0\n");
}
}