Pagini recente » Cod sursa (job #1199707) | Cod sursa (job #1315636) | Cod sursa (job #3184770) | Cod sursa (job #1230454) | Cod sursa (job #1436136)
#include <algorithm>
#include <deque>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 20005;
int n, a[MAX_N];
int sp[MAX_N];
int flip() {
deque<int> dq;
dq.push_back(0);
int answer = 0, first = -1, last = -1;
for (int i = 1; i <= 2 * n - 1; ++ i) {
sp[i] = sp[i - 1] + a[i];
if (!dq.empty() && i - dq.front() == n + 1) {
dq.pop_front();
}
if (answer < sp[i] - sp[dq.front()]) {
answer = sp[i] - sp[dq.front()];
first = dq.front() + 1; last = i;
}
while (!dq.empty() && sp[i] <= sp[dq.back()]) {
dq.pop_back();
}
dq.push_back(i);
}
for (int i = first; i <= last; ++ i) {
if (i <= n) {
a[i] = -a[i];
a[i + n] = -a[i + n];
} else {
a[i] = -a[i];
a[i - n] = -a[i - n];
}
}
return answer;
}
int main() {
ifstream fin("ferma.in");
ofstream fout("ferma.out");
int k;
fin >> n >> k;
for (int i = 1; i <= n; ++ i) {
fin >> a[i];
a[i + n] = a[i];
}
int answer = 0;
for (int i = 1; i <= k; ++ i) {
answer += flip();
}
fout << answer << "\n";
return 0;
}