100 uac求调
查看原帖
100 uac求调
1501877
wuzebang2009楼主2025/1/15 10:02
#include<bits/stdc++.h>
using namespace std;
int dp[800010],n,l,r,a[800010];
priority_queue<int>q1,q2;

int main(){
    cin>>n>>l>>r;
    for(int i=0;i<=n;i++) cin>>a[i];
    for(int i=1;i<l;i++) q2.push(a[i]);
    memset(dp,128,sizeof dp);
    // cout<<dp[1];
    dp[0]=0;
    // if(l==r){
    //     // for(int i=l;i<=n+l;i++){
    //     //     int j=i-l;
    //     //     dp[i]=max(dp[i],dp[j]+a[i]);
    //     // }
    //     // int ans=-0x3f3f3f3f;
    //     // for(int i=n-r+1;i<=n;i++)
    //     //     ans=max(ans,dp[i]);
    //     // cout<<ans;
    //     cout<<-3;
    // }
    for(int i=l;i<=n;i++){
        q1.push(dp[i-l]);
        // for(int j=0;j<min(i,n);j++){
        if(i-r-1>=l) q2.push(dp[i-r-1]);
        while(!q2.empty() && q1.top()==q2.top()){
            // dp[i]=max(dp[i],dp[j]+a[i]);
            q1.pop(),q2.pop();
        }
        dp[i]=q1.top()+a[i];
        // }
    }
    int ans=-0x3f3f3f3f;
    for(int i=n-r+1;i<=n;i++)
        ans=max(ans,dp[i]);
    cout<<ans;
}
/*  while(l<=r&&q[r]<f[i])r--;
  r++;q[r]=f[i],t[r]=i;
  while(l<=r&&i+L-t[l]>R)l++;*/
2025/1/15 10:02
加载中...