Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98089 | luohao | 早凉与序列4 | C++ | 解答错误 | 0 | 1000 MS | 3392 KB | 936 | 2023-08-14 12:00:02 |
#include "bits/stdc++.h" using namespace std; int n,k,x,a[200000],s[200000],f[200000],l,ans,i,j,b[200000]; struct node{ int v,i; }q[200000]; void push(int x,int i) { while(l>0&&x>=q[l].v) l--; q[++l].v=x,q[l].i=i; } int main() { cin>>n>>k>>x; for(i=1;i<=n;i++) cin>>a[i],b[i]=a[i]; if(x<0) x=-x,k=n-k; if(k!=0) { for(i=1;i<=n-k+1;i++) { l=0; q[1].v=0; for(j=1;j<i;j++) b[j]=a[j]-x; for(j=i;j<=i+k-1;j++) b[j]=a[j]+x; for(j=i+k;j<=n;j++) b[j]=a[j]-x; for(j=1;j<=n;j++) s[j]=s[j-1]+b[j]; for(j=1;j<=n;j++) { f[j]=max(0,q[1].v+s[j]); push(f[j]-s[j],j); } for(int j=1;j<=n;j++) ans=max(ans,f[j]); } cout<<max(0,ans); } else { for(i=1;i<=n;i++) a[i]-=x; for(i=1;i<=n;i++) s[i]=s[i-1]+a[i]; for(i=1;i<=n;i++) { f[i]=max(0,q[1].v+s[i]); push(f[i]-s[i],i); } for(int j=1;j<=n;j++) ans=max(ans,f[j]); cout<<ans; } }