#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e6 + 5;
long long n, ans, a[MAX_N], ra[MAX_N], ng[MAX_N], rng[MAX_N], ns[MAX_N],
    rns[MAX_N];
stack<pair<long long, int>> st;
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    ra[i] = a[i];
  }
  reverse(ra, ra + n);
  for (int i = n - 1; i >= 0; --i) {
    while (!st.empty() && st.top().first <= a[i]) {
      st.pop();
    }
    if (st.empty()) {
      ng[i] = n;
    } else {
      ng[i] = st.top().second;
    }
    st.push({a[i], i});
  }
  while (!st.empty()) {
    st.pop();
  }
  for (int i = n - 1; i >= 0; --i) {
    while (!st.empty() && st.top().first >= a[i]) {
      st.pop();
    }
    if (st.empty()) {
      ns[i] = n;
    } else {
      ns[i] = st.top().second;
    }
    st.push({a[i], i});
  }
  while (!st.empty()) {
    st.pop();
  }
  for (int i = n - 1; i >= 0; --i) {
    while (!st.empty() && st.top().first < ra[i]) {
      st.pop();
    }
    if (st.empty()) {
      rng[i] = -1;
    } else {
      rng[i] = st.top().second;
    }
    st.push({ra[i], n - i - 1});
  }
  while (!st.empty()) {
    st.pop();
  }
  for (int i = n - 1; i >= 0; --i) {
    while (!st.empty() && st.top().first > ra[i]) {
      st.pop();
    }
    if (st.empty()) {
      rns[i] = -1;
    } else {
      rns[i] = st.top().second;
    }
    st.push({ra[i], n - i - 1});
  }
  reverse(rng, rng + n);
  reverse(rns, rns + n);
  for (int i = 0; i < n; ++i) {
    ans += (ng[i] - i) * (i - rng[i]) * a[i];
    ans -= (ns[i] - i) * (i - rns[i]) * a[i];
  }
  cout << ans << endl;
  return 0;
}
