100pts WA on #11#12 求条
查看原帖
100pts WA on #11#12 求条
1201113
Gua_gua_gua楼主2025/8/29 08:52
#include<bits/stdc++.h>
#define int long long
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
int in(){
	int f=1,x=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return f*x;
}
int n=in(),a[400005],l=in(),r=in(),f[400005],q[400005],tail=0,head=1;
signed main(){
	up(0,n,i) a[i]=in();
	int ans=(int)-1e9;
	up(l,n,i){
		while(f[i-l]>f[q[tail]]&&tail>=head) tail--;
		q[++tail]=i-l;
		while(q[head]+r<i) head++;
		int from=q[head];
		f[i]=f[from]+a[i];
		if(i+r>=n) ans=max(ans,f[i]);
	}
	printf("%lld",ans);
	return 0;
}
2025/8/29 08:52
加载中...