#include #include using namespace std; using namespace atcoder; using ll = long long; const int INF = 1e9+1; struct S{ int m1; int m2; }; S op1(S a, S b){ vector v(4); v[0] = a.m1, v[1] = a.m2, v[2] = b.m1, v[3] = b.m2; sort(v.begin(), v.end()); return {v[0], v[1]}; } S e1(){ return {INF, INF}; } int op2(int a, int b){ return max(a, b); } int e2(){ return -INF; } int main(){ int N, x, mx; cin >> N; S mi; vector a(N); vector b(N); ll ans=0; for (int i=0; i> x; a[i] = x; b[i] = {x, INF}; } segtree tmx(a); segtree tmi(b); for (int i=0; i1){ c = (l+r)/2; mi = tmi.prod(i, c+1); mx = tmx.prod(i, c+1); if (mx <= mi.m1 + mi.m2) l=c; else r=c; } ans += l-i; } cout << ans << endl; return 0; }