func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> split, ans;   int a[300002];   int p[300002][3];   long long max(long long a, long long b) { return a >= b ? a : b; }   long long min(long long a, long long b) { return a <= b ? a : b; }   int main() {     int n, i, j, l, r;     scanf( %d , &n);     for (i = 1; i <= n; i++) {       scanf( %d , a + i);     }     a[0] = a[n + 1] = 0;     long long _0, _1, _2, __0, __1, __2;     _0 = a[1], _1 = 0, _2 = -1;     for (i = 1; i <= n; i++) {       p[i + 1][0] = p[i + 1][1] = p[i + 1][2] = -1;       __0 = __1 = __2 = -1;       if (~_0) {         if (__1 == -1 || _0 < __1) {           __1 = _0;           p[i + 1][1] = 0;         }       }       if (~_1) {         if (__2 == -1 || _1 < __2) {           __2 = _1;           p[i + 1][2] = 1;         }       }       if (~_2) {         if (__0 == -1 || _2 + max(a[i], a[i + 1]) < __0) {           __0 = _2 + max(a[i], a[i + 1]);           p[i + 1][0] = 2;         }         if (__1 == -1 || _2 + a[i] < __1) {           __1 = _2 + a[i];           p[i + 1][1] = 2;         }       }       _0 = __0, _1 = __1, _2 = __2;     }     long long u;     j = 0, u = __0;     if (__1 < u) j = 1, u = __1;     if (__2 < u) j = 2, u = __2;     split.clear();     for (i = n + 1;; i--) {       if (j == 0) {         split.push_back(i - 1);       }       if (i == 1) break;       j = p[i][j];     }     ans.clear();     int t;     for (i = 0; i < split.size(); i++) {       j = split[i];       t = min(a[j], a[j + 1]);       a[j] -= t, a[j + 1] -= t;       if (t) ans.push_back(j);     }     for (i = split.size() - 1; i >= -1; i--) {       l = i == split.size() - 1 ? 0 : split[i + 1] + 1, r = ~i ? split[i] : n + 1;       for (j = l; j <= r; j += 2) {         if (j >= 1 && min(a[j - 1], a[j])) {           t = min(a[j - 1], a[j]);           a[j - 1] -= t, a[j] -= t;           ans.push_back(j - 1);         }         if (j <= n && min(a[j], a[j + 1])) {           t = min(a[j], a[j + 1]);           a[j] -= t, a[j + 1] -= t;           ans.push_back(j);         }       }     }     printf( %d n , ans.size());     for (i = 0; i < ans.size(); i++) printf( %d n , ans[i]);     return 0;   }   