#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;
}
