#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1<<19;
int a[N], Ans, final_Ans;
signed main(){
int n, k, cur = 0;
cin>>n>>k;
vector<pair<int, int>> vec;
for (int i=1;i<=n;i++){
cin>>a[i];
if (cur == 0 or a[i] == 0)
cur += a[i];
else if ((cur < 0) == (a[i] < 0))
cur += a[i];
else{
vec.push_back({cur, i});
cur = a[i];
}
}
if (cur > 0)
vec.push_back({cur, n});
if (vec.size() > 0 and vec[0].first < 0)
vec.erase(begin(vec));
while (1){
vector<int> ansVec;
for (int i=0;i<vec.size();i += 2)
ansVec.push_back(vec[i].first);
sort(begin(ansVec), end(ansVec));
int kk = k;
while (kk > 0 and ansVec.size() > 0)
Ans += ansVec.back(), ansVec.pop_back(), kk--;
final_Ans = max(final_Ans, Ans), Ans = 0;
int id = -1, mn = 1e17;
for (int i=1;i<vec.size()-1;i += 2){
if (-vec[i].first < min(vec[i+1].first, vec[i-1].first)){
if (-vec[i].first <= mn)
id = i, mn = -vec[i].first;
}
}
if (id == -1 or ansVec.size() == 0)
break;
vec[id-1] = {vec[id+1].first + vec[id-1].first + vec[id].first, vec[id-1].second};
vec.erase(begin(vec) + id);
vec.erase(begin(vec) + id);
}
cout<<final_Ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |