Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98183 | wssdr | 早凉与序列4 | C++ | 通过 | 100 | 23 MS | 2580 KB | 579 | 2023-08-14 12:26:29 |
#include<bits/stdc++.h> #define LL long long #define N 200005 using namespace std; int n,k;LL x,s[N],ans1,ans2; int q[N],l,r;LL mn; int main(){ scanf("%d%d%lld",&n,&k,&x); for(int i(1);i<=n;++i) scanf("%lld",&s[i]),s[i]+=s[i-1]; if(x<0) k=n-k,x=-x; q[l=r=1]=0; for(int i(1);i<=n;++i){ while(l<=r&&s[i]+i*x<=s[q[r]]+q[r]*x) --r;q[++r]=i; while(l<=r&&i-q[l]>k) ++l; ans1=max(ans1,s[i]+i*x-s[q[l]]-q[l]*x); } for(int i(k);i<=n;++i){ mn=min(mn,s[i-k]-(i-k)*x); ans2=max(ans2,s[i]-i*x-mn+2*k*x); } printf("%lld\n",max(ans1,ans2)); return 0; }