Pagini recente » Cod sursa (job #2084599) | Cod sursa (job #2087086) | Cod sursa (job #3246855) | Cod sursa (job #3266451) | Cod sursa (job #65204)
Cod sursa(job #65204)
#include <stdio.h>
#define NMAX 40000
long long a[NMAX],v[NMAX],best[NMAX],pos[NMAX];
long long n,i,j,k,T,rt;
void citire()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%lld %lld",&n,&T);
if (n>40000) for (;;);
for (i=1;i<=n;i++)
scanf("%lld",&a[i]);
}
void solve()
{
long int s=0,cnt=0,ok=0;
for (i=1;i<=n;i++)
{
if (s+a[i]<0) {
if (i>1) {v[++cnt]=s;pos[cnt]=i-1;}
v[++cnt]=a[i];pos[cnt]=i;s=0;ok=0;
}
else {s+=a[i];ok=1;}
}
if (ok) {v[++cnt]=s;pos[cnt]=n;}
for (rt=1;rt*rt<=T;rt++);
long int back,sol;
for (i=1;i<=cnt;i++)
{
if (i-2>rt) back=i-rt-1;
else back=0;
s=v[i];best[i]=s*pos[i]-T+best[i-1];
for (j=i-1;j>=back;j--)
{
s+=v[j];
sol=s*pos[i]-T+best[j-1];
if (sol>best[i]) best[i]=sol;
}
}
printf("%lld",best[cnt]);
}
int main()
{
citire();
solve();
return 0;
}