Submission #1165665

#TimeUsernameProblemLanguageResultExecution timeMemory
1165665WarinchaiFeast (NOI19_feast)C++20
30 / 100
44 ms4936 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ar[300005];
int sum[300005];
int inf=1e18+5;
int n,k;
pair<int,int> solve(int l){
    pair<int,int>best={0,0};
    pair<int,int>ans={0,0};
    for(int i=1;i<=n;i++){
        pair<int,int>tans={sum[i]+best.first-l,best.second+1};
        ans=max(ans,tans);
        best=max(best,{ans.first-sum[i],ans.second});
    }
    return {ans.first,ans.second};
}
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>ar[i];
        sum[i]=sum[i-1]+ar[i];
    }
    int st=0,en=3e15+1,ans=0;
    while(st<=en){
        int m=(st+en)/2;
        auto x=solve(m);
        //cerr<<m<<" "<<x.first<<" "<<x.second<<"\n";
        if(x.second>=k){
            st=m+1;
            ans=x.first+k*m;
        }else{
            en=m-1;
        }
    }
    cout<<ans;
}
#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...