#include<bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T>
bool Min(T &a, const T &b) {
return a > b ? a = b, 1 : 0;
}
const int N = 2e5+5;
int n, a[N], b[N];
ll P[N], M[N];
void solve() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
ll sum = 0, mn = 0;
int idx = 0;
for (int i = 0; i < n; i++) {
sum += a[i];
if (Min(mn, sum)) idx = i + 1;
}
idx %= n;
for (int i = 0; i < n; i++)
b[i] = a[(idx + i) % n];
for (int i = 1; i < n; i++) {
P[i] = P[i - 1] + max(0, b[i - 1]);
M[i] = M[i - 1] + min(0, b[i - 1]);
}
ll ans = 0; int v = 0;
for (int u = 0; u < n; u++) {
while (v < n && -M[v] < P[u]) v++;
ans += (n - max(u, v));
}
cout << ans << '\n';
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIGxsID0gbG9uZyBsb25nOwoKdGVtcGxhdGU8Y2xhc3MgVD4gCmJvb2wgTWluKFQgJmEsIGNvbnN0IFQgJmIpIHsgCiAgICByZXR1cm4gYSA+IGIgPyBhID0gYiwgMSA6IDA7IAp9Cgpjb25zdCBpbnQgTiA9IDJlNSs1OwoKaW50IG4sIGFbTl0sIGJbTl07CmxsIFBbTl0sIE1bTl07Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IGFbaV07CgogICAgbGwgc3VtID0gMCwgbW4gPSAwOwogICAgaW50IGlkeCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHN1bSArPSBhW2ldOwogICAgICAgIGlmIChNaW4obW4sIHN1bSkpIGlkeCA9IGkgKyAxOwogICAgfQogICAgaWR4ICU9IG47CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgYltpXSA9IGFbKGlkeCArIGkpICUgbl07CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBQW2ldID0gUFtpIC0gMV0gKyBtYXgoMCwgYltpIC0gMV0pOwogICAgICAgIE1baV0gPSBNW2kgLSAxXSArIG1pbigwLCBiW2kgLSAxXSk7CiAgICB9CgogICAgbGwgYW5zID0gMDsgaW50IHYgPSAwOwogICAgZm9yIChpbnQgdSA9IDA7IHUgPCBuOyB1KyspIHsKICAgICAgICB3aGlsZSAodiA8IG4gJiYgLU1bdl0gPCBQW3VdKSB2Kys7CiAgICAgICAgYW5zICs9IChuIC0gbWF4KHUsIHYpKTsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CgogICAgaW50IHRlc3RzID0gMTsgY2luID4+IHRlc3RzOwogICAgd2hpbGUgKHRlc3RzLS0pIHNvbHZlKCk7CgogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIHMuXG4iOwogICAgI2VuZGlmCgogICAgcmV0dXJuIDA7Cn0K