#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef long double ld;
const ll dim = 2*(1e6)+7;
//const ll mod = 1e9 + 7;
const ll inf = 1e17 + 77;
//#define endl "\n"
#define fi first
#define pb push_back
#define se second
#define vll vector<ll>
ll n, m, k;
ll t;
ll a[dim];
ll dp[dim];
int main() {
ll u, w,q, v;
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>k;
set<pll> sml;
set<pll> s;
ll sm=0;
ll fl=1;
ll c=0;
for(int i=1; i<=n; i++) {
cin >> a[i];
if (fl && a[i] >= 0) {
sm += a[i];
} else if (fl == 0 && a[i] < 0) {
sm += a[i];
} else {
c++;
s.insert({c, sm});
sm=0;
fl = 1 - fl;
sm += a[i];
}
}
c++;
s.insert({c, sm});
while(s.size()>0 && (*s.begin()).se<=0){
s.erase(s.begin());
}
while(s.size()>0 && (*s.rbegin()).se<=0){
auto it=(--s.end());
s.erase(it);
}
m=s.size();
m=(m+1)/2;
ll ans=0;
for(auto x: s){
ll p1=x.fi;
ll p2=x.se;
// cout<<p1<<" "<<p2<<endl;
if(p2>0)ans+=x.se;
sml.insert({abs(p2), p1});
}
// cout<<ans<<endl;
if(m<=k){
cout<<ans<<endl;
return 0;
}
else{
m-=k;
}
while((s.size()+1)/2>k){
pll cur=(*sml.begin());
sml.erase(sml.begin());
/* if((*s.rbegin()).se<0){
s.erase((--s.end()));
}
if((*s.rbegin()).se<0){
s.erase((--s.end()));
}*/
ll id=cur.se;
auto it1=(s.lower_bound({id, -inf}));
if(it1==(--s.end()) || it1==s.begin()){
if((*it1).se>0)m--;
s.erase(it1);
}
else{
ll val=(*it1).se;
auto it2=it1;
it1++;
it2--;
pll x=(*it1);
pll y=(*it2);
s.erase(it1);
s.erase(it2);
sml.erase({abs(x.se), x.fi});
sml.erase({abs(y.se), y.fi});
s.insert({cur.se, x.se+y.se+val});
sml.insert({abs( x.se+y.se+val), cur.se});
m--;
}
}
ans=0;
for(auto x: s){
if(x.se>0)ans+=x.se;
}
cout<<ans<<endl;
return 0;
}
# | 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... |