#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define mii map<int,int>
#define mll map<ll,ll>
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define fi first
#define se second
using namespace std;
int t, n, a[500005];
ll pf[500005], dp, st[2000005], res[500005];
vector<ll> nen;
int gpos(ll x) {
return lower_bound(nen.begin(),nen.end(),x)-nen.begin();
}
void upd(int id, int l, int r, int pos, int rpos) {
if (l>pos || r<pos) return;
if (l==r) {
st[id]=max(st[id],dp-rpos);
return;
}
int mid=(l+r)/2;
upd(id*2,l,mid,pos,rpos);
upd(id*2+1,mid+1,r,pos,rpos);
st[id]=max(st[id*2],st[id*2+1]);
return;
}
ll gans(int id, int l, int r, int u, int v) {
if (l>v || r<u) return -1e9;
if (l>=u && r<=v) return st[id];
int mid=(l+r)/2;
return max(gans(id*2,l,mid,u,v),gans(id*2+1,mid+1,r,u,v));
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
cin>>t;
while (t--) {
nen.clear();
cin>>n;
for (int i=0; i<=4*(n+1); i++) {
st[i]=-1e9;
}
pf[0]=0;
nen.push_back(0);
res[0]=-1e9;
for (int i=1; i<=n; i++) {
cin>>a[i];
pf[i]=pf[i-1]+a[i];
nen.push_back(pf[i]);
res[i]=-1e9;
}
sort(nen.begin(),nen.end());
nen.erase(unique(nen.begin(),nen.end()),nen.end());
for (int i=0; i<=n; i++) {
pf[i]=gpos(pf[i]);
}
dp=0;
upd(1,0,n,pf[0],0);
res[pf[0]]=0;
for (int i=1; i<=n; i++) {
dp=max({gans(1,0,n,0,pf[i]-1)+i,res[pf[i]],dp-1});
res[pf[i]]=max(res[pf[i]],dp);
upd(1,0,n,pf[i],i);
}
cout<<dp<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbmRsICJcbiIKI2RlZmluZSBtaWkgbWFwPGludCxpbnQ+CiNkZWZpbmUgbWxsIG1hcDxsbCxsbD4KI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBsaSBwYWlyPGxsLGludD4KI2RlZmluZSBwbGwgcGFpcjxsbCxsbD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgdCwgbiwgYVs1MDAwMDVdOwpsbCBwZls1MDAwMDVdLCBkcCwgc3RbMjAwMDAwNV0sIHJlc1s1MDAwMDVdOwp2ZWN0b3I8bGw+IG5lbjsKaW50IGdwb3MobGwgeCkgewogICAgcmV0dXJuIGxvd2VyX2JvdW5kKG5lbi5iZWdpbigpLG5lbi5lbmQoKSx4KS1uZW4uYmVnaW4oKTsKfQp2b2lkIHVwZChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHBvcywgaW50IHJwb3MpIHsKICAgIGlmIChsPnBvcyB8fCByPHBvcykgcmV0dXJuOwogICAgaWYgKGw9PXIpIHsKICAgICAgICBzdFtpZF09bWF4KHN0W2lkXSxkcC1ycG9zKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkPShsK3IpLzI7CiAgICB1cGQoaWQqMixsLG1pZCxwb3MscnBvcyk7CiAgICB1cGQoaWQqMisxLG1pZCsxLHIscG9zLHJwb3MpOwogICAgc3RbaWRdPW1heChzdFtpZCoyXSxzdFtpZCoyKzFdKTsKICAgIHJldHVybjsKfQpsbCBnYW5zKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKICAgIGlmIChsPnYgfHwgcjx1KSByZXR1cm4gLTFlOTsKICAgIGlmIChsPj11ICYmIHI8PXYpIHJldHVybiBzdFtpZF07CiAgICBpbnQgbWlkPShsK3IpLzI7CiAgICByZXR1cm4gbWF4KGdhbnMoaWQqMixsLG1pZCx1LHYpLGdhbnMoaWQqMisxLG1pZCsxLHIsdSx2KSk7Cn0KaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwogICAgY2luPj50OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIG5lbi5jbGVhcigpOwogICAgICAgIGNpbj4+bjsKICAgICAgICBmb3IgKGludCBpPTA7IGk8PTQqKG4rMSk7IGkrKykgewogICAgICAgICAgICBzdFtpXT0tMWU5OwogICAgICAgIH0KICAgICAgICBwZlswXT0wOwogICAgICAgIG5lbi5wdXNoX2JhY2soMCk7CiAgICAgICAgcmVzWzBdPS0xZTk7CiAgICAgICAgZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIHsKICAgICAgICAgICAgY2luPj5hW2ldOwogICAgICAgICAgICBwZltpXT1wZltpLTFdK2FbaV07CiAgICAgICAgICAgIG5lbi5wdXNoX2JhY2socGZbaV0pOwogICAgICAgICAgICByZXNbaV09LTFlOTsKICAgICAgICB9CiAgICAgICAgc29ydChuZW4uYmVnaW4oKSxuZW4uZW5kKCkpOwogICAgICAgIG5lbi5lcmFzZSh1bmlxdWUobmVuLmJlZ2luKCksbmVuLmVuZCgpKSxuZW4uZW5kKCkpOwogICAgICAgIGZvciAoaW50IGk9MDsgaTw9bjsgaSsrKSB7CiAgICAgICAgICAgIHBmW2ldPWdwb3MocGZbaV0pOwogICAgICAgIH0KICAgICAgICBkcD0wOwogICAgICAgIHVwZCgxLDAsbixwZlswXSwwKTsKICAgICAgICByZXNbcGZbMF1dPTA7CiAgICAgICAgZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIHsKICAgICAgICAgICAgZHA9bWF4KHtnYW5zKDEsMCxuLDAscGZbaV0tMSkraSxyZXNbcGZbaV1dLGRwLTF9KTsKICAgICAgICAgICAgcmVzW3BmW2ldXT1tYXgocmVzW3BmW2ldXSxkcCk7CiAgICAgICAgICAgIHVwZCgxLDAsbixwZltpXSxpKTsKICAgICAgICB9CiAgICAgICAgY291dDw8ZHA8PGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=