func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MAXN = 1e5 + 10;   const long long MAXL = 20;   long long n, m;   long long v[MAXN], s[MAXN];   long long rmq[MAXL][MAXN];   long long resp[MAXN];   long long best[MAXN];   void buildRMQ() {     for (long long k = 0; k < n; k++) rmq[0][k] = s[k];     for (long long i = 1; i < MAXL; i++)       for (long long k = 0; k < MAXN; k++)         if (k + (1 << i) <= n)           rmq[i][k] = max(rmq[i - 1][k], rmq[i - 1][k + (1 << i - 1)]);   }   long long RMQ(long long a, long long b) {     long long size = b - a + 1;     long long log = 31 - __builtin_clz(size);     return max(rmq[log][a], rmq[log][b - (1 << log) + 1]);   }   long long bs(long long ini, long long fim, long long pos) {     while (ini < fim) {       long long mid = (ini + fim + 1) / 2;       if (RMQ(mid, pos - 1) >= s[pos])         ini = mid;       else         fim = mid - 1;     }     return ini;   }   int main() {     scanf( %lld %lld , &n, &m);     for (long long i = 0; i < n; i++) scanf( %lld , &v[i]);     s[0] = 0;     for (long long i = 1; i < n; i++) s[i] = abs(v[i] - v[i - 1]);     buildRMQ();     while (m--) {       long long p, q;       scanf( %lld %lld , &p, &q);       p--;       q--;       long long ans = 0;       stack<pair<long long, long long> > st;       for (long long i = p; i <= q; i++) {         while (st.size() && st.top().first <= s[i]) st.pop();         if (st.size())           best[i] = st.top().second;         else           best[i] = 0;         st.push(pair<long long, long long>(s[i], i));       }       for (long long i = p; i <= q; i++) {         resp[i] = 0;         long long bt = best[i];         if (s[bt] >= s[i]) {           resp[i] = s[i] * (i - bt) + resp[bt];         } else {           resp[i] = s[i] * (i - p);         }         ans += resp[i];       }       printf( %lld n , ans);     }   }   