Pagini recente » Cod sursa (job #794873) | Cod sursa (job #91178) | Cod sursa (job #364120) | Cod sursa (job #1780587) | Cod sursa (job #941951)
Cod sursa(job #941951)
#include <iostream>
#include <fstream>
#define f1 "euro.in"
#define f2 "euro.out"
//#define f1 "account.inp"
//#define f2 "account.out"
long long t;
long long tong[35000];
using namespace std;
long long tien(long long x,long long y,long long k){
return((tong[x]-tong[y-1])*k-t);
}
int main(){
ifstream fi;fi.open(f1);
ofstream fo;fo.open(f2);
long long a[35000];
long long n;
fi>>n>>t;
for (int i=1;i<=n;i++) fi>>a[i];
long long csmax[35000];
long 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 long x;
long long trace[35000];
f[1]=a[1]-t;
trace[1]=1;
//fo<<f[1]<<" 0 "<<csmax[1]<<" "<<trace[1]<<" "<<f[1]<<endl;
for (int i=2;i<=n;i++){
trace[i]=trace[i-1];
f[i]=f[trace[i]-1]+tien(i,trace[i],i);
x=f[csmax[i]-1]+tien(i,csmax[i],i);
//fo<<f[i]<<" "<<x<<" ";
if (f[i]==x){
f[i]=x;
if(tong[i]-tong[csmax[i]-1]>tong[i]-tong[trace[i]-1]){
trace[i]=csmax[i];
}
} else if (f[i]<x) {
f[i]=x;
trace[i]=csmax[i];
}
//fo<<csmax[i]<<" "<<trace[i]<<" "<<f[i]<<endl;
}
fo<<f[n];
fi.close();
fo.close();
return 0;
}