记录编号 |
593809 |
评测结果 |
WWWWWWWWWA |
题目名称 |
数字游戏 |
最终得分 |
10 |
用户昵称 |
何沛儒 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.288 s |
提交时间 |
2024-09-15 12:07:24 |
内存使用 |
6.91 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,s,t;
#define N 100005
#define ll long long
ll a[N];
ll ans = 1e15;
struct tree{
int l,r;
ll minn;
}tr[4*N];
void build(int p,int l,int r){
tr[p].l = l,tr[p].r = r,tr[p].minn=1e15;
if(l == r){
tr[p].minn = a[l];
return;
}
int mid = l+r >> 1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
tr[p].minn = min(tr[p*2].minn,tr[p*2+1].minn);
}
ll modify(int p,int l,int r){
if (l>tr[p].r || r<tr[p].l) return 1e15;
if(tr[p].l >= l && tr[p].r <= r) return tr[p].minn;
int mid = tr[p].l + tr[p].r >> 1;
ll anss = 1e15;
if(l <= mid) anss = min(ans,modify(p*2,l,r));
if(r > mid) anss = min(ans,modify(p*2+1,l,r));
return anss;
}
int main(){
freopen("ggame.in","r",stdin);
freopen("ggame.out","w",stdout);
cin >> n >> s >> t;
for(int i = 1; i <= n; i++){
scanf("%lld",&a[i]);
a[i] += a[i-1];
}
build(1,1,n);
ans = a[s];
for(int i = s+1; i <= n; i++){
if(i-t <= 0)ans = max(ans,a[i]-max((long long)0,modify(1,1,i-s)));
else ans = max(ans,a[i]-modify(1,i-t,i-s));
}
printf("%lld",ans);
return 0;
}