Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98130 seanlsy 早凉与序列4 C++ 通过 100 18 MS 12804 KB 1107 2023-08-14 12:20:54

Tests(60/60):


#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; }


测评信息: