Pagini recente » Cod sursa (job #2606533) | Cod sursa (job #2961315) | Cod sursa (job #3039691) | Cod sursa (job #426610) | Cod sursa (job #489287)
Cod sursa(job #489287)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define MAXN 35000
#define per pair<long long, long long>
using namespace std;
long long A[MAXN];
long long s;
int i, j, N;
long long T;
per a,b;
inline bool ok(const per &a, const per &b)
{
return (a.first * a.second - T) <= (a.first * b.second);
}
int main()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%d %lld",&N,&T);
for (i=1; i<=N; ++i)
scanf("%lld",A+i);
vector<per> Q;
for (i=1; i<=N;){
s=0;
while (s>=0 && i<=N){
s+=A[i]*1LL;
++i;
}
Q.push_back( make_pair(s, i-1) );
}
memset(A, 0, sizeof(A));
N = Q.size();
A[0] = 0;
for (i=0; i<N; ++i){
a = Q[i];
A[i+1] = A[i] + a.first * a.second - T;
for (j=i-1; j>=0 && (j-i)*(j-i) <= T+100; --j){
a.first += Q[j].first;
A[i+1] = max(A[i+1], A[j]+a.first*a.second-T);
}
}
printf("%lld\n", A[N]);
fclose(stdin); fclose(stdout);
return 0;
}