Submission #787955

#TimeUsernameProblemLanguageResultExecution timeMemory
787955ttamxFeast (NOI19_feast)C++14
100 / 100
112 ms12756 KiB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll,int> p2;

const int N=3e5+5;

int n,k;
ll a[N],qs[N];
p2 dp[N];

p2 calc(ll lambda){
    p2 mx(0,0);
    for(int i=1;i<=n;i++){
        dp[i]=max(dp[i-1],{mx.first+qs[i]-lambda,mx.second-1});
        mx=max(mx,{dp[i].first-qs[i],dp[i].second});
    }
    dp[n].second*=-1;
    return dp[n];
}

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n >> k;
    for(int i=1;i<=n;i++)cin >> a[i];
    for(int i=1;i<=n;i++)qs[i]=qs[i-1]+a[i];
    ll l=0,r=3e14+1;
    while(l<r){
        ll m=(l+r)/2;
        if(calc(m).second<=k)r=m;
        else l=m+1;
    }
    cout << calc(l).first+l*k;
}
#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...