Submission #1209962

#TimeUsernameProblemLanguageResultExecution timeMemory
1209962hehebjp123Feast (NOI19_feast)C++17
100 / 100
104 ms7484 KiB
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define all(a) a.begin(),a.end()
#define ii pair<ll,ll>
using namespace std;

const ll N=3e5+5;
ll t,n,i,j,m,k;
ll res=0,ans=0;
ll dp[2][N],a[N];
ll check(ll k)
{
    dp[0][0]=0;
    dp[1][0]=-1e18;
    ll res=0;
    for(ll i=1;i<=n;i++)
    {
        // calc dp[0][i]=max(dp[0][i-1],dp[1][i-1]+a[i])
    dp[0][i]=max(dp[0][i-1],dp[1][i-1]);
    dp[1][i]=max(dp[0][i-1]+a[i]-k,dp[1][i-1]+a[i]);
    //    cout<<sl[0][i]<<" "<<dp[0][i]<<" "<<sl[1][i]<<" "<<dp[1][i]<<'\n';
    res=max(res,dp[1][i]);
  //  cout<<dp[0][i]<<" "<<dp[1][i]<<'\n';
    }
    ans=res;
    if(res==0) return 0;
    ll sl=0;
    bool op=0;
    for(ll i=n;i>0;i--)
    if(res==dp[1][i])
    {
        if(!op)
        {
            sl++;
            op=1;
        }
        res-=a[i];
    }
    else
    {
        if(op)
        {
            op=0;
            res+=k;
        }
    }
    ans+=sl*k;
    return sl;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
cin>>n>>k;
for(i=1;i<=n;i++) cin>>a[i];
ll l=0,r=1e18,res=0;
//return cout<<check(6),0;
while(l<=r)
{
    ll mid=(l+r)/2;
    ll kq=check(mid);
    //cout<<mid<<" "<<kq<<'\n';
    if(kq<=k)
    {
        res=max(res,ans);
        r=mid-1;
    }
    else l=mid+1;

}
cout<<res;
    return 0;
}
/*
6 1
1 -2 3 -1 5 -6
*/
#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...