#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxN = 3e5+10;
ll n, k;
ll a[maxN];
struct food{
ll from, to, val;
bool positive;
};
vector<pair<pair<ll, ll>, ll>> foods;
ll getAll(){
vector<ll> pos;
for(auto i : foods){
if(i.second>=0)pos.push_back(i.second);
}
ll r=0;
for(ll i = 0; i < pos.size(); i++){
r+=pos[i];
}
return r;
}
ll sumAll(){
vector<ll> pos;
for(auto i : foods){
if(i.second>=0)pos.push_back(i.second);
}
sort(pos.begin(), pos.end());
reverse(pos.begin(), pos.end());
ll r=0;
for(ll i = 0; i < pos.size()&&i<k; i++){
//cout<<pos[i]<<endl;
r+=pos[i];
}
return r;
}
int main()
{
//ios_base::sync_with_stdio(0);cin.tie(nullptr);
cin>>n>>k;
for(ll i = 0; i < n; i++){
cin>>a[i];
//cout<<i<<"a"<<endl;
}
ll i = 0, curSum = 0;
bool isPositive=(a[0]>=0);
bool add=isPositive;
ll posSeg=0, negSeg=0;
for(ll j = 0; j < n; j++){
if(isPositive&&a[j]>=0){
curSum+=a[j];
}
if(!isPositive&&a[j]<=0){
curSum+=a[j];
}
if(!isPositive&&a[j]>0){
negSeg++;
foods.push_back({{i, j-1}, curSum});
isPositive=(isPositive==false);
curSum=a[j];
i=j;
}
if(isPositive&&a[j]<0){
posSeg++;
foods.push_back({{i, j-1}, curSum});
isPositive=(isPositive==false);
curSum=a[j];
i=j;
}
}
if(!isPositive){
negSeg++;
foods.push_back({{i, n}, curSum});
}
if(isPositive){
posSeg++;
foods.push_back({{i, n}, curSum});
}
if(posSeg<=k){
cout<<sumAll();
}else if(k==1){
ll r=0, s=0, sMin=0;
for(ll i = 0; i < n; i++){
s+=a[i];
r=max(r, s-sMin);
sMin=min(sMin, s);
}
cout<<r<<endl;
}
else if(k<=n&&n<=80){
ll ans=sumAll();
vector<pair<ll, ll>> v;
for(ll i = 0; i < foods.size()-1; i++){
if(foods[i].second<0&&foods[i+1].second>0&&foods[i-1].second>0)v.push_back({foods[i].second, i});
}
sort(v.begin(), v.end());
ll tAns=getAll();
for(auto i = 0; i < n-k; i++){
tAns-=v[i].first;
}
cout<<max(ans, tAns);
}
else{
cout<<sumAll();
/*
if(add==0){
foods.erase(foods.begin());
negSeg--;
}
if(isPositive==0){
foods.erase(foods.end());
negSeg--;
}
*/
}
return 0;
}
/*
10 2
54 2 -3 1 1 2 -6 1 5 10
*/
Compilation message
feast.cpp: In function 'll getAll()':
feast.cpp:25:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
25 | for(ll i = 0; i < pos.size(); i++){
| ~~^~~~~~~~~~~~
feast.cpp: In function 'll sumAll()':
feast.cpp:39:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
39 | for(ll i = 0; i < pos.size()&&i<k; i++){
| ~~^~~~~~~~~~~~
feast.cpp: In function 'int main()':
feast.cpp:108:25: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
108 | for(ll i = 0; i < foods.size()-1; i++){
| ~~^~~~~~~~~~~~~~~~
feast.cpp:59:10: warning: unused variable 'add' [-Wunused-variable]
59 | bool add=isPositive;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
109 ms |
2452 KB |
Output is correct |
2 |
Correct |
103 ms |
2500 KB |
Output is correct |
3 |
Correct |
107 ms |
2628 KB |
Output is correct |
4 |
Correct |
105 ms |
2500 KB |
Output is correct |
5 |
Correct |
118 ms |
2584 KB |
Output is correct |
6 |
Correct |
100 ms |
2516 KB |
Output is correct |
7 |
Correct |
112 ms |
2488 KB |
Output is correct |
8 |
Correct |
111 ms |
2488 KB |
Output is correct |
9 |
Correct |
103 ms |
2472 KB |
Output is correct |
10 |
Correct |
112 ms |
2648 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
56 ms |
2504 KB |
Output is correct |
2 |
Correct |
57 ms |
2532 KB |
Output is correct |
3 |
Correct |
56 ms |
2504 KB |
Output is correct |
4 |
Correct |
57 ms |
2496 KB |
Output is correct |
5 |
Correct |
115 ms |
2636 KB |
Output is correct |
6 |
Correct |
57 ms |
2512 KB |
Output is correct |
7 |
Correct |
61 ms |
2564 KB |
Output is correct |
8 |
Correct |
109 ms |
2544 KB |
Output is correct |
9 |
Correct |
101 ms |
2480 KB |
Output is correct |
10 |
Correct |
56 ms |
2600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
138 ms |
8836 KB |
Output is correct |
2 |
Correct |
118 ms |
8764 KB |
Output is correct |
3 |
Correct |
124 ms |
8884 KB |
Output is correct |
4 |
Correct |
116 ms |
8784 KB |
Output is correct |
5 |
Correct |
123 ms |
9004 KB |
Output is correct |
6 |
Correct |
122 ms |
8884 KB |
Output is correct |
7 |
Correct |
119 ms |
8796 KB |
Output is correct |
8 |
Correct |
116 ms |
9004 KB |
Output is correct |
9 |
Correct |
123 ms |
8828 KB |
Output is correct |
10 |
Correct |
139 ms |
8836 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
109 ms |
2452 KB |
Output is correct |
2 |
Correct |
103 ms |
2500 KB |
Output is correct |
3 |
Correct |
107 ms |
2628 KB |
Output is correct |
4 |
Correct |
105 ms |
2500 KB |
Output is correct |
5 |
Correct |
118 ms |
2584 KB |
Output is correct |
6 |
Correct |
100 ms |
2516 KB |
Output is correct |
7 |
Correct |
112 ms |
2488 KB |
Output is correct |
8 |
Correct |
111 ms |
2488 KB |
Output is correct |
9 |
Correct |
103 ms |
2472 KB |
Output is correct |
10 |
Correct |
112 ms |
2648 KB |
Output is correct |
11 |
Correct |
56 ms |
2504 KB |
Output is correct |
12 |
Correct |
57 ms |
2532 KB |
Output is correct |
13 |
Correct |
56 ms |
2504 KB |
Output is correct |
14 |
Correct |
57 ms |
2496 KB |
Output is correct |
15 |
Correct |
115 ms |
2636 KB |
Output is correct |
16 |
Correct |
57 ms |
2512 KB |
Output is correct |
17 |
Correct |
61 ms |
2564 KB |
Output is correct |
18 |
Correct |
109 ms |
2544 KB |
Output is correct |
19 |
Correct |
101 ms |
2480 KB |
Output is correct |
20 |
Correct |
56 ms |
2600 KB |
Output is correct |
21 |
Correct |
138 ms |
8836 KB |
Output is correct |
22 |
Correct |
118 ms |
8764 KB |
Output is correct |
23 |
Correct |
124 ms |
8884 KB |
Output is correct |
24 |
Correct |
116 ms |
8784 KB |
Output is correct |
25 |
Correct |
123 ms |
9004 KB |
Output is correct |
26 |
Correct |
122 ms |
8884 KB |
Output is correct |
27 |
Correct |
119 ms |
8796 KB |
Output is correct |
28 |
Correct |
116 ms |
9004 KB |
Output is correct |
29 |
Correct |
123 ms |
8828 KB |
Output is correct |
30 |
Correct |
139 ms |
8836 KB |
Output is correct |
31 |
Correct |
1 ms |
204 KB |
Output is correct |
32 |
Correct |
0 ms |
204 KB |
Output is correct |
33 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
34 |
Halted |
0 ms |
0 KB |
- |