Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98281 | CSYZ_ChenHL | 早凉与序列4 | C++ | 运行出错 | 20 | 54 MS | 4988 KB | 856 | 2023-08-14 14:16:28 |
#include<bits/stdc++.h>//100pts #define int long long using namespace std; int n,k,x; int a[2000010],pre[2000010]; int f[2000010]; int q[2000010],h,t; signed main() { cin>>n>>k>>x; for(int i=1;i<=n;i++) cin>>a[i],pre[i]=pre[i-1]+a[i]; if(x<0) { k=n-k; x=-x; } for(int i=0;i<=n;i++) f[i]=pre[i]-x*i; int ans=0; int minn=0; for(int i=k;i<=n;i++) { int res=f[i]-minn+2*k*x; ans=max(res,ans); minn=min(minn,f[i-k+1]); } if(k==0) { cout<<ans<<endl; return 0; } for(int i=0;i<=n;i++) f[i]+=2*i*x; h=1,t=0; q[++t]=0; for(int i=1;i<=n;i++) { while(t<=h&&q[h]<i-k) h--; ans=max(ans,f[i]-f[q[h]]); while(t<=h&&f[q[t]]>f[i]) t++; q[--t]=i; } cout<<ans<<endl; return 0; } /* 4 1 2 2 -1 2 3 6 2 -8 4 -1 9 -3 7 -8 3 0 5 3 2 4 5 1 4 1 9 1 9 8 */