#include <bits/stdc++.h>
using namespace std;
long long int a[1000005];
int A[1000005], B[1000004], C[1000005], D[1000005];
int main() {
  long long int n, i;
  cin >> n;
  for (i = 1; i < n + 1; i++) cin >> a[i];
  stack<long long int> nge;
  for (i = 1; i < n + 1; i++) {
    while (!nge.empty() && a[nge.top()] < a[i]) {
      nge.pop();
    }
    if (nge.empty())
      A[i] = 0;
    else
      A[i] = nge.top();
    nge.push(i);
  }
  while (!nge.empty()) nge.pop();
  for (i = 1; i < n + 1; i++) {
    while (!nge.empty() && a[nge.top()] > a[i]) nge.pop();
    if (nge.empty())
      C[i] = 0;
    else
      C[i] = nge.top();
    nge.push(i);
  }
  while (!nge.empty()) nge.pop();
  for (i = n; i >= 1; i--) {
    while (!nge.empty() && a[nge.top()] <= a[i]) nge.pop();
    if (nge.empty()) {
      B[i] = n + 1;
    } else
      B[i] = nge.top();
    nge.push(i);
  }
  while (!nge.empty()) nge.pop();
  for (i = n; i >= 1; i--) {
    while (!nge.empty() && a[nge.top()] >= a[i]) nge.pop();
    if (nge.empty())
      D[i] = n + 1;
    else
      D[i] = nge.top();
    nge.push(i);
  }
  long long int ans = 0;
  for (i = 1; i < n + 1; i++) {
    long long int u = D[i] - i;
    long long int e = i - C[i];
    u = u * e * a[i];
    long long int t = B[i] - i;
    long long int o = i - A[i];
    t = t * o * a[i];
    u = t - u;
    ans += u;
  }
  cout << ans << "\n";
}
