求助(玄关)

P1725 琪露诺

ycy1124 @ 2024-06-11 19:03:16

#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

|