func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   int a[100002];   int mini[100002][21];   vector<pair<int, int> > vp;   int f(int l, int r, int m) {     if (l == r) {       for (int i = 0; i < a[l] - m; i++) {         vp.push_back(make_pair(l, r));       }       return a[l] - m;     }     int i = 0;     for (i = 0;; i++)       if (l + (1 << i) > r) break;     int minIndex = -1;     if (a[mini[l][i - 1]] < a[mini[r - (1 << (i - 1)) + 1][i - 1]]) {       minIndex = mini[l][i - 1];     } else {       minIndex = mini[r - (1 << (i - 1)) + 1][i - 1];     }     for (int i = 0; i < a[minIndex] - m; i++) {       vp.push_back(make_pair(l, r));     }     if (minIndex == l) {       return a[minIndex] - m + f(l + 1, r, a[minIndex]);     }     if (minIndex == r) {       return a[minIndex] - m + f(l, r - 1, a[minIndex]);     } else {       return a[minIndex] - m + f(l, minIndex - 1, a[minIndex]) +              f(minIndex + 1, r, a[minIndex]);     }   }   int main() {     cout << setprecision(9);     cin >> n;     for (int i = 0; i < n; i++) cin >> a[i];     for (int i = 0; i < n; i++) mini[i][0] = i;     for (int i = 1; i < 21; i++) {       for (int j = 0; j + (1 << i) - 1 < n; j++) {         if (a[mini[j][i - 1]] < a[mini[j + (1 << (i - 1))][i - 1]]) {           mini[j][i] = mini[j][i - 1];         } else {           mini[j][i] = mini[j + (1 << (i - 1))][i - 1];         }       }     }     cout << f(0, n - 1, 0) << endl;     for (int i = 0; i < vp.size(); i++)       cout << 1 + vp[i].first <<     << 1 + vp[i].second << endl;     return 0;   }   