#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 5;
int n, a[N], l1[N], r1[N], l2[N], r2[N];
stack<int> s;

int main() 
{
	cin.tie(0)->ios_base::sync_with_stdio(0);
    cin >> n;
    for (int i = 0; i < n; ++i) cin >> a[i];
    for (int i = 0; i < n; ++i) 
    {
        while (!s.empty() && a[s.top()] < a[i]) s.pop();
        l1[i] = s.empty() ? -1 : s.top();
        s.push(i);
    }
    while (!s.empty()) s.pop();
    for (int i = n - 1; i >= 0; --i) 
    {
        while (!s.empty() && a[s.top()] <= a[i]) s.pop();
        r1[i] = s.empty() ? n : s.top();
        s.push(i);
    }

    while (!s.empty()) s.pop();
    for (int i = 0; i < n; ++i) 
    {
        while (!s.empty() && a[s.top()] > a[i]) s.pop();
        l2[i] = s.empty() ? -1 : s.top();
        s.push(i);
    }
    while (!s.empty()) s.pop();
    for (int i = n - 1; i >= 0; --i) 
    {
        while (!s.empty() && a[s.top()] >= a[i]) s.pop();
        r2[i] = s.empty() ? n : s.top();
        s.push(i);
    }

    long long z = 0;
    for (int i = 0; i < n; ++i) 
    {
        long long mx = 1LL * (i - l1[i]) * (r1[i] - i);
        long long mn = 1LL * (i - l2[i]) * (r2[i] - i);
        z += a[i] * (mx - mn);
    }

    cout << z;
}
