func_code_string: #include <bits/stdc++.h>   using namespace std;   struct lr {     long long left, right;     lr() : left(-1), right(1e7) {}     lr(long long _l, long long _r) : left(_l), right(_r) {}   };   int main() {     long long n;     scanf( %lld , &n);     vector<long long> arr(n);     for (int i = 0; i < n; i++) scanf( %lld , &arr[i]);     vector<lr> mn(n, lr(0, n - 1));     vector<lr> mx(n, lr(0, n - 1));     stack<lr> mxs, mns;     for (int i = 0; i < n; i++) {       while (!mxs.empty()) {         if (mxs.top().left >= arr[i]) {           break;         } else {           lr it = mxs.top();           mxs.pop();           mx[it.right].right = i - 1;         }       }       mxs.push(lr(arr[i], i));       while (!mns.empty()) {         if (mns.top().left <= arr[i]) {           break;         } else {           lr it = mns.top();           mns.pop();           mn[it.right].right = i - 1;         }       }       mns.push(lr(arr[i], i));     }     while (!mxs.empty()) mxs.pop();     while (!mns.empty()) mns.pop();     for (int i = n - 1; i >= 0; i--) {       while (!mxs.empty()) {         if (mxs.top().left > arr[i]) {           break;         } else {           lr it = mxs.top();           mxs.pop();           mx[it.right].left = i + 1;         }       }       mxs.push(lr(arr[i], i));       while (!mns.empty()) {         if (mns.top().left < arr[i]) {           break;         } else {           lr it = mns.top();           mns.pop();           mn[it.right].left = i + 1;         }       }       mns.push(lr(arr[i], i));     }     long long res = 0;     for (int i = 0; i < n; i++) {       long long x1 = mx[i].right - i + 1, x2 = mn[i].right - i + 1,                 n1 = i - mx[i].left + 1, n2 = i - mn[i].left + 1;       long long a = x1 * n1;       long long b = x2 * n2;       res += a * arr[i];       res -= b * arr[i];     }     cout << res << endl;     return 0;   }   