全部评论 1

  • A20997.琪露诺

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2*1e5+100;
    int Num[N],dp[N];
    int n,l,r;
    int main(){
        cin>>n>>l>>r;
    
        for(int i=0;i<=n;++i){
            cin>>Num[i];
        }
        for(int i=1;i<=n;++i){
           dp[i]=INT32_MIN;
        }
        int ans=INT32_MIN;
        deque <int> q;
        for(int i=l;i<=n;i++){
            while(!q.empty()&&dp[i-l]>=dp[q.back()]){
                q.pop_back();
            }
            q.push_back(i-l);
            while(!q.empty()&&q.front()<i-r){
                q.pop_front();
            }
            
            dp[i]=dp[q.front()]+Num[i];
            
            if(i>n-r){
                ans=max(ans,dp[i]);
            }
        }
        cout<<ans;
    }
    

    2025-08-05 来自 浙江

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页