社区讨论
only WA on #4,双倍经验能过
P2034选择数字参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mkrziagf
- 此快照首次捕获于
- 2026/01/24 15:24 4 周前
- 此快照最后确认于
- 2026/01/24 19:18 4 周前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define getchar getchar_unlocked
inline long long read() {
long long x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + (c - '0');
c = getchar();
}
return x * f;
}
int n,k;
int a[1000006];
int f[1000005][10];
int pre[1000005];
deque<int>dq;
inline void add(int x){
while(!dq.empty()&&dq.back()<=x)
dq.pop_back();
dq.push_back(x);
}
inline void del(int x){
if(dq.front()==x) dq.pop_front();
}
signed main(){
n=read(),k=read();
for(int i=1;i<=n;i++){
a[i]=read();
pre[i]=pre[i-1]+a[i];
f[i][1]=a[i];
}
int ans=0;
for(int i=1;i<=n;i++){
f[i][0]=max(f[i-1][0],f[i-1][1]);
int cnt=-1e9;
// for(int j=max(0LL,i-k);j<i;j++){
// cnt=max(cnt,f[j][0]-pre[j]);
// }
add(f[i][0]-pre[i]);
if(i<=k) f[i][1]=pre[i];
else {
del(f[i-k-1][0]-pre[i-k-1]);
f[i][1]=dq.front()+pre[i];
}
ans=max({f[i][0],f[i][1],ans});
}
printf("%lld",ans);
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...