#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define d(x) cout << (x) << endl
using namespace std;typedeflonglong ll;constint mod =1e9+7;constint N =8e4+10;int a[N];int n;
ll ans =0;intmain(){scanf("%d",&n);for(int i =0; i < n; i++){scanf("%d",&a[i]);}
stack<int> s;//栈维护栈底到栈顶递减的元素下标
a[n]= INF;//将最后一个元素设为无限高设为牛for(int i =0; i <= n; i++){if(s.empty()|| a[i]< a[s.top()]){//满足递减的单调性
s.push(i);}else{while(!s.empty()&& a[i]>= a[s.top()]){//不满足递减单调性,将破坏栈单调性的元素下标出栈//当前位置i就是栈顶元素右手边遇到的第一个比他大的数的位置int top = s.top();
s.pop();
ans +=(i - top -1);}
s.push(i);//所有破坏栈单调性的元素下标都出站后,}//将当前元素下表入栈}printf("%lld\n", ans);return0;}