#include <bits/stdc++.h>
using namespace std;
int fun(vector<int> &A, int B) {
int n = A.size();
int suff[n + 1]; // Suffix sum array
suff[n] = 0; // Extra element for ease
suff[n - 1] = A[n - 1];
// Compute suffix sum from right to left
for (int i = n - 2; i >= 0; i--)
suff[i] = A[i] + suff[i + 1];
int prefSum = 0; // Sum from left
int ans = suff[n - B]; // Taking all B elements from right
// Try taking 'i' elements from left and remaining from right
for (int i = 0; i < B; i++) {
prefSum += A[i]; // Add current left element
int suffSum = suff[n - B + (i + 1)]; // Remaining elements from right
ans = max(ans, prefSum + suffSum);
}
return ans;
}
int solve(vector<int> &A, int B) {
return fun(A, B);
}
int main() {
vector<int> A = {5, -2, 3, 1, 2};
int B = 3;
cout << solve(A, B);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZnVuKHZlY3RvcjxpbnQ+ICZBLCBpbnQgQikgewogICAgaW50IG4gPSBBLnNpemUoKTsKICAgIGludCBzdWZmW24gKyAxXTsgIC8vIFN1ZmZpeCBzdW0gYXJyYXkKICAgIHN1ZmZbbl0gPSAwOyAgLy8gRXh0cmEgZWxlbWVudCBmb3IgZWFzZQogICAgc3VmZltuIC0gMV0gPSBBW24gLSAxXTsKCiAgICAvLyBDb21wdXRlIHN1ZmZpeCBzdW0gZnJvbSByaWdodCB0byBsZWZ0CiAgICBmb3IgKGludCBpID0gbiAtIDI7IGkgPj0gMDsgaS0tKQogICAgICAgIHN1ZmZbaV0gPSBBW2ldICsgc3VmZltpICsgMV07CgogICAgaW50IHByZWZTdW0gPSAwOyAgLy8gU3VtIGZyb20gbGVmdAogICAgaW50IGFucyA9IHN1ZmZbbiAtIEJdOyAgLy8gVGFraW5nIGFsbCBCIGVsZW1lbnRzIGZyb20gcmlnaHQKCiAgICAvLyBUcnkgdGFraW5nICdpJyBlbGVtZW50cyBmcm9tIGxlZnQgYW5kIHJlbWFpbmluZyBmcm9tIHJpZ2h0CiAgICBmb3IgKGludCBpID0gMDsgaSA8IEI7IGkrKykgewogICAgICAgIHByZWZTdW0gKz0gQVtpXTsgIC8vIEFkZCBjdXJyZW50IGxlZnQgZWxlbWVudAogICAgICAgIGludCBzdWZmU3VtID0gc3VmZltuIC0gQiArIChpICsgMSldOyAgLy8gUmVtYWluaW5nIGVsZW1lbnRzIGZyb20gcmlnaHQKICAgICAgICBhbnMgPSBtYXgoYW5zLCBwcmVmU3VtICsgc3VmZlN1bSk7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CgppbnQgc29sdmUodmVjdG9yPGludD4gJkEsIGludCBCKSB7CiAgICByZXR1cm4gZnVuKEEsIEIpOwp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IEEgPSB7NSwgLTIsIDMsIDEsIDJ9OwogICAgaW50IEIgPSAzOwogICAgY291dCA8PCBzb2x2ZShBLCBCKTsKICAgIHJldHVybiAwOwp9Cg==