//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(){
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);
//for(auto x:b) cout << x << " ";
//cout << endl;
deque <pair <int, int> > negatives;
for(int i=0; i<(int)b.size(); i++){
if(sgn(b[i])<0) negatives.push_back({b[i], 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;
k=min(k, (int)b.size()-(int)negatives.size());
while((int)segments.size()!=k){
//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();
}
int res=0;
for(auto p:segments){
//cout << p.first << " " << p.second << endl;
res+=kadane(p.first, p.second);
}
cout << res << endl;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
106 ms |
2616 KB |
Output is correct |
2 |
Correct |
105 ms |
2612 KB |
Output is correct |
3 |
Correct |
127 ms |
2628 KB |
Output is correct |
4 |
Correct |
114 ms |
2636 KB |
Output is correct |
5 |
Correct |
128 ms |
2620 KB |
Output is correct |
6 |
Correct |
108 ms |
2704 KB |
Output is correct |
7 |
Correct |
102 ms |
2644 KB |
Output is correct |
8 |
Correct |
104 ms |
2672 KB |
Output is correct |
9 |
Correct |
106 ms |
2584 KB |
Output is correct |
10 |
Correct |
104 ms |
2636 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
70 ms |
2584 KB |
Output is correct |
2 |
Correct |
60 ms |
2636 KB |
Output is correct |
3 |
Correct |
56 ms |
2684 KB |
Output is correct |
4 |
Correct |
59 ms |
2656 KB |
Output is correct |
5 |
Correct |
100 ms |
2628 KB |
Output is correct |
6 |
Correct |
73 ms |
2636 KB |
Output is correct |
7 |
Correct |
61 ms |
2636 KB |
Output is correct |
8 |
Correct |
104 ms |
2704 KB |
Output is correct |
9 |
Correct |
112 ms |
2612 KB |
Output is correct |
10 |
Correct |
56 ms |
2684 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
151 ms |
5084 KB |
Output is correct |
2 |
Correct |
124 ms |
5032 KB |
Output is correct |
3 |
Correct |
121 ms |
5076 KB |
Output is correct |
4 |
Correct |
119 ms |
4940 KB |
Output is correct |
5 |
Correct |
131 ms |
5108 KB |
Output is correct |
6 |
Correct |
124 ms |
5068 KB |
Output is correct |
7 |
Correct |
129 ms |
5116 KB |
Output is correct |
8 |
Correct |
130 ms |
5064 KB |
Output is correct |
9 |
Correct |
124 ms |
5160 KB |
Output is correct |
10 |
Correct |
124 ms |
5220 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
106 ms |
2616 KB |
Output is correct |
2 |
Correct |
105 ms |
2612 KB |
Output is correct |
3 |
Correct |
127 ms |
2628 KB |
Output is correct |
4 |
Correct |
114 ms |
2636 KB |
Output is correct |
5 |
Correct |
128 ms |
2620 KB |
Output is correct |
6 |
Correct |
108 ms |
2704 KB |
Output is correct |
7 |
Correct |
102 ms |
2644 KB |
Output is correct |
8 |
Correct |
104 ms |
2672 KB |
Output is correct |
9 |
Correct |
106 ms |
2584 KB |
Output is correct |
10 |
Correct |
104 ms |
2636 KB |
Output is correct |
11 |
Correct |
70 ms |
2584 KB |
Output is correct |
12 |
Correct |
60 ms |
2636 KB |
Output is correct |
13 |
Correct |
56 ms |
2684 KB |
Output is correct |
14 |
Correct |
59 ms |
2656 KB |
Output is correct |
15 |
Correct |
100 ms |
2628 KB |
Output is correct |
16 |
Correct |
73 ms |
2636 KB |
Output is correct |
17 |
Correct |
61 ms |
2636 KB |
Output is correct |
18 |
Correct |
104 ms |
2704 KB |
Output is correct |
19 |
Correct |
112 ms |
2612 KB |
Output is correct |
20 |
Correct |
56 ms |
2684 KB |
Output is correct |
21 |
Correct |
151 ms |
5084 KB |
Output is correct |
22 |
Correct |
124 ms |
5032 KB |
Output is correct |
23 |
Correct |
121 ms |
5076 KB |
Output is correct |
24 |
Correct |
119 ms |
4940 KB |
Output is correct |
25 |
Correct |
131 ms |
5108 KB |
Output is correct |
26 |
Correct |
124 ms |
5068 KB |
Output is correct |
27 |
Correct |
129 ms |
5116 KB |
Output is correct |
28 |
Correct |
130 ms |
5064 KB |
Output is correct |
29 |
Correct |
124 ms |
5160 KB |
Output is correct |
30 |
Correct |
124 ms |
5220 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
0 ms |
212 KB |
Output is correct |
33 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
34 |
Halted |
0 ms |
0 KB |
- |