#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;
res+=k;
ll vt=-1,sl=0;
for(ll i=n;i>0;i--)
{
if(i!=vt-1&&res-k==dp[1][i])
{
res=dp[1][i]-a[i];
sl++;
vt=i;
}
if(i==vt-1&&res==dp[1][i])
{
res=dp[1][i]-a[i];
vt=i;
}
}
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |