Pagini recente » Cod sursa (job #2907603) | Cod sursa (job #456255) | Cod sursa (job #941583)
Cod sursa(job #941583)
#include <iostream>
#include <fstream>
#define f1 "euro.in"
#define f2 "euro.out"
using namespace std;
int main(){
ifstream fi;fi.open(f1);
ofstream fo;fo.open(f2);
long a[35000];
long n,t;
fi>>n>>t;
for (int i=1;i<=n;i++){
fi>>a[i];
}
long csmax[35000];
long tong[35000];
long f[35000];
int l;
tong[0]=0;
l=1;
csmax[1]=l;
tong[1]=a[1];
for (int i=2;i<=n;i++){
tong[i]=tong[i-1]+a[i];
if (tong[i]-tong[l-1]<a[i]) l=i;
csmax[i]=l;
}
long x,y;
int solan[35000];
f[1]=a[1]-t;
solan[1]=1;
for (int i=2;i<=n;i++){
x=(f[csmax[i]-1]+(tong[i]-tong[csmax[i]-1])*i-(solan[csmax[i]-1]+1)*t);
y=((f[i-1]+t)/(i-1)+a[i])*i-t;
if (x>y){
f[i]=x;
solan[i]=solan[csmax[i]-1]+1;
} else {
f[i]=y;
}
}
fo<<f[n];
fi.close();
fo.close();
return 0;
}