Pagini recente » Cod sursa (job #2063847) | Cod sursa (job #3173432) | Cod sursa (job #155987) | Cod sursa (job #1993448) | Cod sursa (job #322473)
Cod sursa(job #322473)
#include <iostream>
#include <vector>
#include <cstring>
#define FIN "euro.in"
#define FOUT "euro.out"
#define MAXN 34569
#define PB push_back
#define pB pop_back
using namespace std;
int vsum[MAXN];
int N,T;
vector<int> capete;
int dcap[MAXN];
void iofile(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d%d",&N,&T);
vsum[0]=0;
for (int i=1;i<=N;++i){
scanf("%d",&vsum[i]);
vsum[i]+=vsum[i-1];
}
fclose(stdin);
return ;
}
void solve(void){
int pen,last;
last=0;
pen=0;
for (int i=1;i<=N;++i){
if (last==0){
if (vsum[i]<0){
last=i;
pen=0;
capete.PB(i);
};
} else {
if (vsum[i]-vsum[last]<0){
long long S1=((long long)vsum[i]-vsum[last])*((long long)i)+((long long)vsum[last]-vsum[pen])*((long long)last)-((long long)T*2);
long long S2=((long long)vsum[i]-vsum[pen])*((long long)i)-((long long)T);
if (S1>S2){ pen=last;last=i;capete.PB(i);} else
{last=i;capete.pB();capete.PB(i);}
}
}
}
long long S1=((long long)vsum[N]-vsum[last])*((long long)N)+((long long)vsum[last]-vsum[pen])*((long long) last)-((long long)T*2);
long long S2=((long long)vsum[N]-vsum[pen])*((long long)N)-((long long)T);
if (S2>S1){ capete.pB();capete.PB(N);} else { capete.PB(N);}
memset(dcap,0,sizeof(dcap));
for (unsigned int i=0;i<capete.size();++i) dcap[capete[i]]=1;
int lastcap=0;
long long euroi=0;
for (int i=1;i<=N;++i){
if (dcap[i]){
euroi+=((long long)vsum[i]-vsum[lastcap])*((long long)i);
euroi--;
lastcap=i;
}
}
printf("%lld\n",euroi);
fclose(stdout);
return ;
}
int main(void){
iofile();
solve();
return 0;
}