#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { int n; scanf("%d", &n); int v[n]; for (int i = 0; i < n; i++) { scanf("%d", &v[i]); } if (n == 1) { printf("%d\n", v[0]); puts("1"); return 0; } int dp1[n][2], dp2[n][2], dp3[n][2]; memset(dp1, 0, sizeof(dp1)); memset(dp2, -1, sizeof(dp2)); memset(dp3, -1, sizeof(dp3)); dp1[0][1] = v[0]; int p, c; p = c = 0; for (int i = 1; i < n; i++) { if (dp1[i][1] < dp1[i-1][0]+v[i]) { dp1[i][1] = dp1[i-1][0]+v[i]; dp2[i][1] = i-1; dp3[i][1] = 0; if (dp1[p][c] < dp1[i][1]) { p = i; c = 1; } } if (dp1[i][0] < dp1[i-1][1]) { dp1[i][0] = dp1[i-1][1]; dp2[i][0] = i-1; dp3[i][0] = 1; } if (dp1[i][0] < dp1[i-1][0]){ dp1[i][0] = dp1[i-1][0]; dp2[i][0] = i-1; dp3[i][0] = 0; } if (dp1[p][c] < dp1[i][0]) { p = i; c = 0; } } printf("%d\n", dp1[p][c]); // printf("%d %d\n", p, c); vector ans; while (p != -1 && c != -1) { if (c != 0) { // printf("%d %d\n", p, c); ans.push_back(p+1); } int t = p; p = dp2[p][c]; c = dp3[t][c]; } for (int i = ans.size()-1; i >= 0; i--) { printf("%d ", ans[i]); } puts(""); }