Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98375 | CSYZ_HeYC | 早凉与序列4 | C++ | 通过 | 100 | 26 MS | 10620 KB | 872 | 2023-08-14 16:35:57 |
#include<bits/stdc++.h> using namespace std; #define ll long long template<typename T>inline void read(T &ret){ ret=0;T fh=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();} while(isdigit(ch))ret=ret*10+(ch^48),ch=getchar(); ret*=fh; } const int N=2e5+5; int t,n,k; ll a[N],x,sum[N],ans,b; struct node{ ll val;int id; inline bool operator < (const node X)const{ return val>X.val; } }; int main(){ t=1; while(t--){ priority_queue<node>q; q.push({0,0}); read(n);read(k);read(x); if(x<0)k=n-k,x=-x;ans=b=0; for(int i=1;i<=n;++i){ read(a[i]); sum[i]=sum[i-1]+a[i]-x; q.push({sum[i]+2*i*x,i}); while(i-q.top().id>k)q.pop(); ans=max(ans,sum[i]+2*x*i-q.top().val); if(i>=k){ b=min(b,sum[i-k]); ans=max(ans,sum[i]-b+2*x*k); } } printf("%lld\n",ans); } return 0; }