Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98130 | seanlsy | 早凉与序列4 | C++ | 通过 | 100 | 18 MS | 12804 KB | 1107 | 2023-08-14 12:20:54 |
#include <bits/stdc++.h> #define int long long using namespace std; inline int read(){ int x=0,f=1;char ch=getchar(); for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1; for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch&15); return f*x; } int n,a[200005],k,x,sum[200005],sum2[200005],ans,sum3[200005],mn[200005],mn2[200005],mn3[200005],mn4[200005]; deque<int> dq; signed main(){ // freopen("ssh.in","r",stdin); // freopen("ssh.out","w",stdout); n=read(),k=read(),x=read(); if(x<0) k=n-k,x=-x; for(int i=1;i<=n;i++) a[i]=read(); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i],sum2[i]=sum[i]+x*i,sum3[i]=sum[i]-x*i, mn[i]=min(mn[i-1],sum[i]),mn2[i]=min(mn2[i-1],sum2[i]),mn3[i]=min(mn3[i-1],sum3[i]); for(int i=1;i<=n;i++){ while(dq.size()&&dq.front()<i-k) dq.pop_front(); while(dq.size()&&sum2[dq.back()]>=sum2[i]) dq.pop_back(); dq.push_back(i); if(i>k) mn4[i]=sum2[dq.front()]; } for(int i=1;i<=n;i++) if(i<=k) ans=max(ans,sum2[i]-mn2[i]); else ans=max(ans,max(sum2[i]-mn4[i],sum3[i]-mn3[i-k-1]+2*k*x)); printf("%lld\n",ans); return 0; }