#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define llint long long #define inf 1e18 #define rep(x, s, t) for(llint (x) = (s); (x) < (t); (x)++) #define Rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++) #define chmin(x, y) (x) = min((x), (y)) #define chmax(x, y) (x) = max((x), (y)) using namespace std; typedef pair P; llint n; llint p[100005]; llint calc(llint l, llint r) { if(r-l+1 <= 1) return 0; if(r-l+1 == 2) return 1; llint ret = 0, m = (l+r)/2; llint rcnt = 1, rpos = m; llint lmx = 0, rmn = p[m]; for(int i = m; i >= l; i--){ if(lmx < p[i]){ lmx = max(lmx, p[i]); while(rpos+1 <= r && p[rpos+1] < lmx){ rpos++; if(rmn > p[rpos]) rcnt++; rmn = min(rmn, p[rpos]); } ret += rcnt; } } ret -= 1; llint lcnt = 1, lpos = m; llint rmx = 0, lmn = p[m]; for(int i = m; i <= r; i++){ if(rmx < p[i]){ rmx = max(rmx, p[i]); while(lpos-1 >= l && p[lpos-1] < rmx){ lpos--; if(lmn > p[lpos]) lcnt++; lmn = min(lmn, p[lpos]); } ret += lcnt; } } ret -= 1; ret += calc(l, m-1); ret += calc(m+1, r); return ret; } int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for(int i = 1; i <= n; i++) cin >> p[i]; cout << calc(1, n) << endl; return 0; }