Pagini recente » Cod sursa (job #414973) | Cod sursa (job #2307286) | Cod sursa (job #3246852) | Cod sursa (job #922728) | Cod sursa (job #2243543)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll nmax = 34567+5;
ll n, t, v[nmax], pr[nmax], mn[nmax], pd[nmax], sol = -(1ll<<62);
int main()
{
ifstream fin ("euro.in");
ofstream fout ("euro.out");
fin >> n >> t;
for (int i = 1; i <= n; ++i){
fin >> v[i];
pr[i] = pr[i-1] + v[i];
mn[i] = mn[i-1];
if(pr[mn[i-1]] > pr[i])
mn[i] = i;
}
if(n <= 2000){
for (int i = 1; i <= n; ++i){
pd[i] = -(1ll<<62);
for (int j = 0; j < i; ++j)
pd[i] = max(pd[i], pd[j]+i*(pr[i]-pr[j]));
pd[i] -= t;
}
fout << pd[n] << "\n";
return 0;
}
ll p = n, now = 0, iterations = 0;
while(p >= 1){
++iterations;
now += (pr[p]-pr[mn[p-1]])*p;
p = mn[p-1];
sol = max(sol, now+pr[p]*p-(iterations+(p!=0))*t);
}
fout << sol << "\n";
return 0;
}