Pagini recente » Cod sursa (job #2496743) | Cod sursa (job #2757574) | Istoria paginii runda/luca_oji2 | Cod sursa (job #2917464) | Cod sursa (job #322441)
Cod sursa(job #322441)
//Perticas Catalin
//Working time:
//sursa x puncte
#include<stdio.h>
#include<string.h>
#include<math.h>
FILE*fin=fopen("euro.in","r");
FILE*fout=fopen("euro.out","w");
#define nm 40000
#define ll long long
#define inf 4000000000000LL
#define max(a,b)((a)>(b)?(a):(b))
int b[nm],p[nm],n,t,np;
ll c[nm],sum[nm];
inline ll sij(int i,int j)
{
return sum[j]-sum[i-1];
}
int main()
{
int i,j,ib;
ll suma=0,best,ansc;
fscanf(fin,"%d%d",&n,&t);
np=1;
p[1]=0;
ib=3*sqrt(t);
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&b[i]);
suma+=b[i];
sum[i]=sum[i-1]+b[i];
if(suma<0)
{
p[++np]=i;
suma=0;
}
}
if(p[np]!=n)
p[++np]=n;
for(i=2;i<=np;i++)
{
best=-inf;
for(j=max(1,i-ib);j<i;j++)
{
ansc=c[j]+sij(p[j]+1,p[i])*(ll)p[i]-(ll)t;
best=max(best,ansc);
}
c[i]=best;
}
fprintf(fout,"%lld",c[np]);
fclose(fin);
fclose(fout);
return 0;
}