//fofat-x
#include <bits/stdc++.h>
using namespace std;
#define int long long int
vector <int> b;
int sgn(int x){
if(x==0) return 0;
if(x<0) return -1;
return 1;
}
int kadane(int l, int r){
int best=0;
int sum=0;
for(int i=l; i<=r; i++){
sum=max(b[i], sum+b[i]);
best=max(best, sum);
}
return best;
}
int32_t main(){
freopen("inputfeast.txt", "r", stdin);
//freopen("b.txt", "w", stdout);
int n,k;
cin >> n >> k;
deque <int> a;
for(int i=0; i<n; i++){
int dummy;
cin >> dummy;
a.push_back(dummy);
}
while(a.front()<=0) a.pop_front();
if(a.empty()){cout << 0 << endl; return 0;}
while(a.back()<=0) a.pop_back();
int sign=1;
int s=0;
for(int i=0; i<(int)a.size(); i++){
if(sgn(a[i])==sign or sgn(a[i]==0)) s+=a[i];
else{sign=-sign; b.push_back(s); s=a[i];}
}
b.push_back(s);
//cout << (int)b.size() << " " << k << endl;
//for(auto x:b) cout << x << " ";
//cout << endl;
deque <pair <int, int> > negatives;
int acc=0;
for(int i=0; i<(int)b.size(); i++){
if(sgn(b[i])<0) negatives.push_back({b[i], i});
else acc+=b[i];
}
sort(negatives.begin(), negatives.end());
map <int, int> segments;
segments.insert({0, (int)b.size()-1});
//for(auto x:negatives) cout << x.first << " " << x.second << endl;
//cout << (int)b.size()-(int)negatives.size() << " " << k << " " << acc << " " << kadane(0, (int)b.size()-1) << endl;
int res=0;
int sum=0;
while((int)segments.size()!=k and (not negatives.empty())){
for(auto p:segments){
//cout << p.first << " " << p.second << endl;
sum+=kadane(p.first, p.second);
}
res=max(res, sum);
//for(auto u:segments) cout << u.first << " " << u.second << endl;
//cout << endl;
auto ind=segments.upper_bound(negatives.front().second);
--ind;
int f=(*ind).first;
int s=(*ind).second;
segments.erase(ind);
segments.insert({f, negatives.front().second-1});
segments.insert({negatives.front().second+1, s});
negatives.pop_front();
}
cout << res << endl;
}
Compilation message
feast.cpp: In function 'int32_t main()':
feast.cpp:24:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
24 | freopen("inputfeast.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
99 ms |
50472 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
102 ms |
50384 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
105 ms |
50480 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
104 ms |
50416 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
104 ms |
50416 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
104 ms |
50416 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
99 ms |
50472 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |