Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #3337999) | Borderou de evaluare (job #2416531) | Cod sursa (job #3336719) | Cod sursa (job #3316623)
#include <fstream>
#include <deque>
#define nmax 34570
#define inf 1e18
using namespace std;
ifstream cin("euro.in");
ofstream cout("euro.out");
int n,m,t,x,poz[nmax];
long long v[nmax],dp[nmax],s[nmax],sum;
deque<int>q;
int main()
{
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>x;
if(sum<0){
v[++m]=sum;
poz[m]=i-1;
sum=x;
}else
sum+=x;
}
v[++m]=sum;
poz[m]=n;
for(int i=1;i<=m;i++){
s[i]=v[i]+s[i-1];
dp[i]=max(s[i]*poz[i]-t,dp[i-1]+v[i]*poz[i]-t);
/*for(int j=1;j<=i;j++)
dp[i]=max(dp[i],dp[j-1]+(s[i]-s[j-1])*poz[i]-t);*/
while(!q.empty()&&s[q.back()]<=s[i]){
dp[i]=max(dp[i],dp[q.back()-1]+(s[i]-s[q.back()-1])*poz[i]-t);
q.pop_back();
}
/*if(!q.empty())
dp[i]=max(dp[i],dp[q.back()-1]+(s[i]-s[q.back()-1])*poz[i]-t);*/
q.push_back(i);
}
cout<<dp[m];
return 0;
}