Cod sursa(job #941923)

Utilizator dvh312dvh312 dvh312 Data 20 aprilie 2013 08:43:33
Problema Euro Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#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]<<endl;

    for (int i=2;i<=n;i++){
        trace[i]=trace[i-1];
        f[i]=f[trace[i]-1]+tien(i,trace[i],i);
        //fo<<f[i];
        x=f[csmax[i]-1]+tien(i,csmax[i],i);
        //fo<<" "<<x;
        if (f[i]<x) {
            f[i]=x;
            trace[i]=i;
        }
        //fo<<" "<<f[i]<<endl;
    }

    fo<<f[n];
    fi.close();
    fo.close();
    return 0;
}