Pagini recente » Cod sursa (job #1648507) | Cod sursa (job #2352087) | Cod sursa (job #797784) | Cod sursa (job #3255124) | Cod sursa (job #751617)
Cod sursa(job #751617)
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX_N = 34568 ;
const long long INF = 1000000000000000000LL ;
const int MAX_EURO = 1000 ;
int n,t ;
long long sume[MAX_N] ;
long long neg[MAX_N],conv[MAX_N] ;
long long sol[MAX_N] ;
bool ok(int i,int j)
{
return (i-j) * (i-j) <= t + MAX_EURO ;
}
int main()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%d%d",&n,&t);
int indice = 1 ;
for(int i=1;i<=n;++i)
{
int x ;
scanf("%d",&x);
sume[i] = sume[i-1] + x ;
if(neg[indice] < 0)
++indice ;
neg[indice] += x ;
conv[indice] = i ;
}
for(int i=1;i<=indice;++i)
{
sol[i] = - INF ;
for(int j=i;j>=0 && ok(i,j)==true;--j)
{
long long bani = sol[j] + ( sume[ conv[i] ] - sume [ conv[j] ] ) * conv[i] - t ;
sol[i] = max(sol[i] , bani) ;
}
}
printf("%lld\n",sol[indice]);
return 0;
}