Cod sursa(job #918193)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 18 martie 2013 18:07:28
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <algorithm>
#include <string.h>
#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;
  
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]);
  
    return 0;
}