제출 #1228905

#제출 시각아이디문제언어결과실행 시간메모리
1228905ripolasFeast (NOI19_feast)C++20
12 / 100
75 ms3424 KiB
#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]&&current+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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...