#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){ if(a.m1 < b.m1){ if(a.m2 < b.m1){ return a; }else{ return {a.m1, b.m1}; } }else{ if(b.m2 < a.m1){ return b; }else{ return {b.m1, a.m1}; } } } 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; }