#include<bits/stdc++.h>
using namespace std;
int main()
{
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
int n;
cin>>n;
vector<int>ar(n);
for(int i = 0;i < n;i ++)
cin>>ar[i];
vector<int>lmin(n,-1),rmin(n,n),lmax(n,-1),rmax(n,n);
vector<int>stk;
for(int i = 0;i < n;i ++)
{
while(stk.size() && ar[stk.back()] < ar[i])
{
rmax[stk.back()] = i;
stk.pop_back();
}
if(stk.size())
lmax[i] = stk.back();
stk.push_back(i);
}
stk.clear();
for(int i = 0;i < n;i ++)
{
while(stk.size() && ar[stk.back()] > ar[i])
{
rmin[stk.back()] = i;
stk.pop_back();
}
if(stk.size())
lmin[i] = stk.back();
stk.push_back(i);
}
stk.clear();
vector<long long>sum;
sum.push_back(0LL);
long long ans = 0;
for(int i = 0;i < n;i ++)
{
while(stk.size() && ar[stk.back()] > ar[i])
{
stk.pop_back();
sum.pop_back();
}
int id = upper_bound(stk.begin(),stk.end(),lmax[i]) - stk.begin();
if(id < stk.size())
{
ans += 1LL * (stk[id] - max(lmin[stk[id]],lmax[i])) * (min(rmin[stk[id]],rmax[i]) - i);
id ++;
auto r = partition_point(stk.begin() + id,stk.end(),[&](int x){
return rmin[x] > rmax[i];
}) - stk.begin();
if(id < r)
ans += 1LL * (stk[r - 1] - lmin[stk[id]]) * rmax[i];
// for(int j = r;j < stk.size();j ++)
// ans += (stk[j] - lmin[stk[j]]) * rmin[stk[j]];
if(r < stk.size())
ans += sum.back() - sum[r];
if(id < stk.size())
ans -= 1LL * (stk.back() - lmin[stk[id]]) * i;
}
sum.push_back(sum.back() + 1LL * (i - lmin[i]) * rmin[i]);
stk.push_back(i);
}
cout<<ans<<"\n";
}
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |
1535A - Fair Playoff | 1538F - Interesting Function |
1920. Build Array from Permutation | 494. Target Sum |
797. All Paths From Source to Target | 1547B - Alphabetical Strings |
1550A - Find The Array | 118B - Present from Lena |
27A - Next Test | 785. Is Graph Bipartite |
90. Subsets II | 1560A - Dislike of Threes |
36. Valid Sudoku | 557. Reverse Words in a String III |