#include <bits/stdc++.h>
using namespace std;
const int INF = 10e8;
#define int long long
signed main(){
int n,k;
cin>>n>>k;
if(k!=1){
vector<int> a (n);
int ans = 0;
int ansL = 0;
int ansR = 0;
bool startR = false;
for(int i = 0;i<n;i++){
cin>>a[i];
ans+=a[i];
if(startR){
ansR+=a[i];
}
if(a[i]<0){
ansL = ans-a[i];
startR = true;
}
}
if(k==1){
cout<<max({ans,ansL,ansR})<<endl;
}else{
cout<<max({ans,ansL+ansR})<<endl;
}
}else{ // k = 1
vector<int> costs;
vector<int> segments;
segments.push_back(0);
for(int i = 0;i<n;i++){
int a;
cin>>a;
if(a>=0){
segments[segments.size()-1]+=a;
}else{
segments.push_back(0);
costs.push_back(a);
}
}
int m = segments.size();
int ans = 0;
int current = segments[0];
for(int i = 1;i<m;i++){
if(current+segments[i]+costs[i-1]>segments[i]&¤t+segments[i]+costs[i-1]>current){
current += segments[i]+costs[i-1];
ans = max(current,ans);
}else{
ans = max(current,ans);
current = segments[i];
ans = max(current,ans);
}
}
cout<<ans<<endl;
}
}
# | 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... |