求助(玄关)
  • 板块P1725 琪露诺
  • 楼主ycy1124
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/11 19:03
  • 上次更新2024/6/11 21:49:23
查看原帖
求助(玄关)
1199534
ycy1124楼主2024/6/11 19:03
#include<bits/stdc++.h>
using namespace std;
long long a[200005],dp[200005];
struct Node{
	long long w,i;
};
deque<Node>p;//zhu,bei
int main(){
	int n,l,r;
	long long ans=-1e18;
	scanf("%d%d%d",&n,&l,&r);
	for(int i=1;i<=n;i++){
		dp[i]=-10000000000;
	}
	for(int i=0;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(int i=0;i<=n;i++){
		if(i-l>=0){
			while(!p.empty()&&dp[i-l]>=p.front().w){
				p.pop_front();
			}
			p.push_front({dp[i-l],i-l});
		}
		while(!p.empty()&&p.back().i<i-r){
			p.pop_back();
		}
		if(!p.empty())
			printf("%lld %lld\n",p.front().i,p.back().i); 
		if(p.empty()){
			dp[i]=a[i];
		}
		else{
			dp[i]=a[i]+p.back().w;
		}
		if(i+r>n){
			ans=max(ans,dp[i]);
		}
	}
	for(int i=0;i<=n+1;i++){
		printf("%lld ",dp[i]);
	}
	printf("%lld",ans);
	return 0;
}
//5 2 3
//0 12 3 11 7 -2
//0 12 3 23 19 21 23 21
2024/6/11 19:03
加载中...