Submission #1209975

#TimeUsernameProblemLanguageResultExecution timeMemory
1209975asdadfscvwerwerFeast (NOI19_feast)C++20
100 / 100
253 ms12148 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+5;
int A[N];
int n;
pair<int,int> lambda(int lmb)
{
    pair<int,int> dp[n][2];
    dp[0][0]={0,0};
    dp[0][1]={A[0]-lmb,1};
    for(int a=1;a<n;a++){
        dp[a][0]=max(dp[a-1][0],dp[a-1][1]);
        dp[a][1]=max(make_pair(dp[a-1][0].first+A[a]-lmb,dp[a-1][0].second+1),make_pair(dp[a-1][1].first+A[a],dp[a-1][1].second));
    }
    return max(dp[n-1][0],dp[n-1][1]);
}
signed main()
{
    int k;
    cin>>n>>k;
    for(int a=0;a<n;a++){
        cin>>A[a];
    }
    int l=0,r=1e18;
    while(l<r){
        int mid=(l+r+1)/2;
        if(lambda(mid).second>=k) l=mid;
        else r=mid-1;
    }
    cout<<lambda(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...