二分法时间复杂度O(nlogn)
尺取法时间复杂度O(n)
#include <iostream>
#include <algorithm>
using namespace std;
#define N 100010
int arr[N+10];
//int sum[N+10];
int main()
{ //二分法
/*int cases;
int n, s;
cin>>cases;
while (cases--) {
cin>>n>>s;
for (int i=0; i<n; i++) {
cin>>arr[i];
}
for (int i=0; i<n; i++) {
sum[i+1]=sum[i]+arr[i];
}
if (sum[n]<s) {
printf("0\n");
continue;
}
int res=n;
for (int i=1; sum[i]+s<=sum[n]; i++) {
int t =lower_bound(sum+i, sum+n, sum[i]+s)-sum;
res=minn(res, t-i);
}
cout<<res<<'\n';
}
*/
//尺取法
int cases;
int n, s;
int res;
int i, j, sum;
cin>>cases;
while (cases--) {
cin>>n>>s;
for (int i=0; i<n; i++) {
cin>>arr[i];
}
res=n+1;
i=j=sum=0;
for (;;) {
while (i<n&&sum<s) {
sum+=arr[i++];
}
if (sum<s) break;
res=min(res, i-j);
sum-=arr[j++];
}
if (res>n) res=0;
cout<<res<<'\n';
}
return 0;
}