//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;
//#define double ldb
#define int ll
#define endl '\n'
#define unoset unordered_set
#define unomap unordered_map
#define strstr stringstream
#define SZ(a) (int)a.size()
#define Unique(a) a.resize(unique(all(a)) - a.begin())
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define all(s) s.begin(), s.end()
#define rall(s) s.rbegin(), s.rend()
#define rev reverse
#define gcd __gcd
#define pushb push_back
#define popb pop_back
#define pushf push_front
#define popf pop_front
#define emp emplace
#define empb emplace_back
#define empf emplace_front
#define lcm(a, b) (a / __gcd(a, b) * b)
#define log_base(x, base) log(x) / log(base)
#define debug cerr<<"No errors!",exit(0);
#define forw(i, a, b) for (int i = a; i <= b; ++i)
#define forw2(i, a, b) for (ll i = a; i <= b; ++i)
#define fors(i, a, b) for (int i = a; i >= b; --i)
#define fors2(i, a, b) for (ll i = a; i >= b; --i)
#define pqueue priority_queue
#define sqrt sqrtl
#define i128 __int128
#define popcount __builtin_popcountll
#define BIT(x, i) (((x) >> (i)) & 1)
#define MASK(x) ((1LL) << (x))
#define want_digit(x) cout << fixed << setprecision(x);
#define excuting_time 1000.0 * clock() / CLOCKS_PER_SEC
#define mapa make_pair
#define ms(a, x) memset(a, x, sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef double db;
typedef string str;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MOD = 1e9 + 7; // 998244353
const int inf = 1e9;
const ll INF = 1e18; // MASK(63) - 1
const int limN = 3e5 + 5;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
inline ll random(const ll &L, const ll &R) {
return uniform_int_distribution<ll> (L, R) (rng);
}
/* -------~~~~~~===== END OF TEMPLATE =====~~~~~~------- */
int n, a[limN], L[limN], R[limN];
ll sum[limN];
void solve() {
cin >> n;
forw (i, 1, n) cin >> a[i], sum[i] = sum[i - 1] + a[i];
vector<int> st;
forw (i, 1, n) {
while (!st.empty() && a[st.back()] < a[i])
st.popb();
L[i] = (st.empty() ? 1 : st.back() + 1);
st.empb(i);
}
st.clear();
fors (i, n, 1) {
while (!st.empty() && a[st.back()] <= a[i])
st.popb();
R[i] = (st.empty() ? n : st.back() - 1);
st.empb(i);
}
// forw (i, 1, n) cout << L[i] << " "; cout << endl;
// forw (i, 1, n) cout << R[i] << " "; cout << endl;
ll ans = 0;
forw (i, 1, n) {
if (i - L[i] < R[i] - i) {
forw (l, L[i], i) {
int min_r = max(i, l + 2);
if (min_r > R[i]) continue;
auto it = ub(sum + min_r, sum + R[i] + 1, sum[l - 1] + 2LL * a[i]);
ans += (sum + R[i] + 1) - it;
}
}
else {
forw (r, i, R[i]) {
int idx = lb(sum, sum + n + 1, sum[r] - 2LL * a[i]) - sum;
int max_l = min({i, r - 2, idx});
if (L[i] <= max_l)
ans += max_l - L[i] + 1;
}
}
}
cout << ans << endl;
}
signed main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
#define name "test"
if (fopen(name".INP", "r")) {
freopen(name".INP", "r", stdin);
freopen(name".OUT", "w", stdout);
}
bool testCase = false;
int numTest = 1;
// cin >> numTest;
forw (i, 1, numTest) {
if (testCase) cout << "Case #" << i << ": ";
solve();
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzMsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsYm1pLGJtaTIsbHpjbnQscG9wY250IikKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8jZGVmaW5lIGRvdWJsZSBsZGIKI2RlZmluZSBpbnQgbGwKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSB1bm9zZXQgdW5vcmRlcmVkX3NldAojZGVmaW5lIHVub21hcCB1bm9yZGVyZWRfbWFwCiNkZWZpbmUgc3Ryc3RyIHN0cmluZ3N0cmVhbQojZGVmaW5lIFNaKGEpIChpbnQpYS5zaXplKCkKI2RlZmluZSBVbmlxdWUoYSkgYS5yZXNpemUodW5pcXVlKGFsbChhKSkgLSBhLmJlZ2luKCkpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgYWxsKHMpIHMuYmVnaW4oKSwgcy5lbmQoKQojZGVmaW5lIHJhbGwocykgcy5yYmVnaW4oKSwgcy5yZW5kKCkKI2RlZmluZSByZXYgcmV2ZXJzZQojZGVmaW5lIGdjZCBfX2djZAojZGVmaW5lIHB1c2hiIHB1c2hfYmFjawojZGVmaW5lIHBvcGIgcG9wX2JhY2sKI2RlZmluZSBwdXNoZiBwdXNoX2Zyb250CiNkZWZpbmUgcG9wZiBwb3BfZnJvbnQKI2RlZmluZSBlbXAgZW1wbGFjZQojZGVmaW5lIGVtcGIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgZW1wZiBlbXBsYWNlX2Zyb250CiNkZWZpbmUgbGNtKGEsIGIpIChhIC8gX19nY2QoYSwgYikgKiBiKQojZGVmaW5lIGxvZ19iYXNlKHgsIGJhc2UpIGxvZyh4KSAvIGxvZyhiYXNlKQojZGVmaW5lIGRlYnVnIGNlcnI8PCJObyBlcnJvcnMhIixleGl0KDApOwojZGVmaW5lIGZvcncoaSwgYSwgYikgIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBmb3J3MihpLCBhLCBiKSBmb3IgKGxsIGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBmb3JzKGksIGEsIGIpICBmb3IgKGludCBpID0gYTsgaSA+PSBiOyAtLWkpCiNkZWZpbmUgZm9yczIoaSwgYSwgYikgZm9yIChsbCBpID0gYTsgaSA+PSBiOyAtLWkpCiNkZWZpbmUgcHF1ZXVlIHByaW9yaXR5X3F1ZXVlCiNkZWZpbmUgc3FydCBzcXJ0bAojZGVmaW5lIGkxMjggX19pbnQxMjgKI2RlZmluZSBwb3Bjb3VudCBfX2J1aWx0aW5fcG9wY291bnRsbAojZGVmaW5lIEJJVCh4LCBpKSAoKCh4KSA+PiAoaSkpICYgMSkKI2RlZmluZSBNQVNLKHgpICgoMUxMKSA8PCAoeCkpCiNkZWZpbmUgd2FudF9kaWdpdCh4KSBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbih4KTsKI2RlZmluZSBleGN1dGluZ190aW1lIDEwMDAuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQwojZGVmaW5lIG1hcGEgbWFrZV9wYWlyCiNkZWZpbmUgbXMoYSwgeCkgbWVtc2V0KGEsIHgsIHNpemVvZihhKSkKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGRiOwp0eXBlZGVmIGRvdWJsZSBkYjsKdHlwZWRlZiBzdHJpbmcgc3RyOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7IC8vIDk5ODI0NDM1Mwpjb25zdCBpbnQgaW5mID0gMWU5Owpjb25zdCBsbCBJTkYgPSAxZTE4OyAvLyBNQVNLKDYzKSAtIDEKY29uc3QgaW50IGxpbU4gPSAzZTUgKyA1OwoKbXQxOTkzN182NCBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKaW5saW5lIGxsIHJhbmRvbShjb25zdCBsbCAmTCwgY29uc3QgbGwgJlIpIHsKICAgIHJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248bGw+IChMLCBSKSAocm5nKTsKfQoKLyogLS0tLS0tLX5+fn5+fj09PT09IEVORCBPRiBURU1QTEFURSA9PT09PX5+fn5+fi0tLS0tLS0gKi8KCmludCBuLCBhW2xpbU5dLCBMW2xpbU5dLCBSW2xpbU5dOwpsbCBzdW1bbGltTl07Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG47CiAgICBmb3J3IChpLCAxLCBuKSBjaW4gPj4gYVtpXSwgc3VtW2ldID0gc3VtW2kgLSAxXSArIGFbaV07CgogICAgdmVjdG9yPGludD4gc3Q7CiAgICBmb3J3IChpLCAxLCBuKSB7CiAgICAgICAgd2hpbGUgKCFzdC5lbXB0eSgpICYmIGFbc3QuYmFjaygpXSA8IGFbaV0pCiAgICAgICAgICAgIHN0LnBvcGIoKTsKCiAgICAgICAgTFtpXSA9IChzdC5lbXB0eSgpID8gMSA6IHN0LmJhY2soKSArIDEpOwogICAgICAgIHN0LmVtcGIoaSk7CiAgICB9CgogICAgc3QuY2xlYXIoKTsKCiAgICBmb3JzIChpLCBuLCAxKSB7CiAgICAgICAgd2hpbGUgKCFzdC5lbXB0eSgpICYmIGFbc3QuYmFjaygpXSA8PSBhW2ldKQogICAgICAgICAgICBzdC5wb3BiKCk7CgogICAgICAgIFJbaV0gPSAoc3QuZW1wdHkoKSA/IG4gOiBzdC5iYWNrKCkgLSAxKTsKICAgICAgICBzdC5lbXBiKGkpOwogICAgfQoKLy8gICAgZm9ydyAoaSwgMSwgbikgY291dCA8PCBMW2ldIDw8ICIgIjsgY291dCA8PCBlbmRsOwovLyAgICBmb3J3IChpLCAxLCBuKSBjb3V0IDw8IFJbaV0gPDwgIiAiOyBjb3V0IDw8IGVuZGw7CgogICAgbGwgYW5zID0gMDsKICAgIGZvcncgKGksIDEsIG4pIHsKICAgICAgICBpZiAoaSAtIExbaV0gPCBSW2ldIC0gaSkgewogICAgICAgICAgICBmb3J3IChsLCBMW2ldLCBpKSB7CiAgICAgICAgICAgICAgICBpbnQgbWluX3IgPSBtYXgoaSwgbCArIDIpOwogICAgICAgICAgICAgICAgaWYgKG1pbl9yID4gUltpXSkgY29udGludWU7CgogICAgICAgICAgICAgICAgYXV0byBpdCA9IHViKHN1bSArIG1pbl9yLCBzdW0gKyBSW2ldICsgMSwgc3VtW2wgLSAxXSArIDJMTCAqIGFbaV0pOwoKICAgICAgICAgICAgICAgIGFucyArPSAoc3VtICsgUltpXSArIDEpIC0gaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvcncgKHIsIGksIFJbaV0pIHsKICAgICAgICAgICAgICAgIGludCBpZHggPSBsYihzdW0sIHN1bSArIG4gKyAxLCBzdW1bcl0gLSAyTEwgKiBhW2ldKSAtIHN1bTsKCiAgICAgICAgICAgICAgICBpbnQgbWF4X2wgPSBtaW4oe2ksIHIgLSAyLCBpZHh9KTsKCiAgICAgICAgICAgICAgICBpZiAoTFtpXSA8PSBtYXhfbCkKICAgICAgICAgICAgICAgICAgICBhbnMgKz0gbWF4X2wgLSBMW2ldICsgMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpOwogICAgI2RlZmluZSBuYW1lICJ0ZXN0IgogICAgaWYgKGZvcGVuKG5hbWUiLklOUCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKG5hbWUiLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4obmFtZSIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQogICAgYm9vbCB0ZXN0Q2FzZSA9IGZhbHNlOwogICAgaW50IG51bVRlc3QgPSAxOwogICAgLy8gY2luID4+IG51bVRlc3Q7CiAgICBmb3J3IChpLCAxLCBudW1UZXN0KSB7CiAgICAgICAgaWYgKHRlc3RDYXNlKSBjb3V0IDw8ICJDYXNlICMiIDw8IGkgPDwgIjogIjsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K