思路分析:
利用双指针
l=1始终作为起点,r=i,不断更新终点
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#define int long long
using namespace std;
int w[2000005],h[2000005],s[2000005];
int t,n,m,l,r;
signed main()
{
cin>>t;
while(t--)
{
int ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>w[i];
s[i]=s[i-1]+w[i];//用前缀和维护
}
for(int i=1;i<=n;i++)
cin>>h[i];
for(int i=1,l=1,r;i<=n;i++)
{
r=i;
if(h[i-1]%h[i]) l=i;
while(s[r]-s[l-1]>m) l++;
ans=max(ans,r-l+1);
}
cout<<ans<<endl;
}
return 0;
}