HDU-6609
#include<bits/stdc++.h>
using namespace std;
#define MAXN 200005
int n,m;
int dp[MAXN];
int main(){
int pa;
cin>>pa;
while(pa--){
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
scanf("%d%d",&n,&m);
int res,k=0;
for(int i=0;i<n;i++){
res=i;
int t;
scanf("%d",&t);
while(res>k&&dp[res-1]+t<=m){
res--;
}
for(int j=i;j>=k;j--){
dp[j+1]=min(dp[j+1],dp[j]);//按照优先队列的顺序
dp[j]+=t; //反向积前缀
if(dp[j+1]>m)k=j+1;//已知被淘汰的可以直接设置标记并跳出
}
cout<<res<<" ";
}
cout<<endl;
}
return 0;
}