harmis_yz 2022-08-16 22:00 采纳率: 100%
浏览 45
已结题

洛谷 P1725 怎么wa了?

洛谷 P1725 怎么wa了?

代码:


```c++
#include<bits/stdc++.h>

using namespace std;

priority_queue<int>q1, q2;

int n, R, L, ans;

int a[200010], f[200010];

int main() {
    scanf("%d%d%d", &n, &L, &R);
    
    for (int i = 0; i <= n; i++)scanf("%d", &a[i]);
    
    for (int i = 1; i < L; i++)q2.push(a[i]);
    
    for (int i = L; i <= n; i++) {
        q1.push(f[i - L]);
        
        if (i - R - 1 >= L)q2.push(f[i - R - 1]);
        
        while (!q2.empty() && q1.top() == q2.top()) {
            q1.pop();
            q2.pop();
        }
        
        f[i] = q1.top() + a[i];
    }
    
    for (int i = n - R + 1; i <= n; i++)ans = max(ans, f[i]);
    
    printf("%d", ans);
}

```

  • 写回答

2条回答 默认 最新

  • GH6 2022-08-16 22:06
    关注

    #include
    #include
    using namespace std;
    #define N 200001
    int dp[N],a[N],n,l,r;
    int q[N][2],head=1,tail=0;
    int main()
    {
    scanf("%d%d%d",&n,&l,&r);
    if(l>r) swap(l,r);//防止l比r大
    for(int i=0;i<=n;i++) scanf("%d",&a[i]);
    for(int i=n;i>=n-l+1;i--)
    {
    dp[i]=a[i];
    }
    for(int i=n+1;i>=l;i--)
    {
    while(tail>=head&&dp[i]>q[tail][0]) tail--;
    tail++;
    q[tail][0]=dp[i];
    q[tail][1]=i;
    //以上为将dp[i]打入单调队列
    dp[i-l]=q[head][0]+a[i-l];//更新
    if(i+r==q[head][1]) head++;//弹出
    }
    cout<<dp[0];
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月16日

悬赏问题

  • ¥15 关于#人工智能#的问题:(2)设计一个GUI,允许语音和文本实现谣言的检测
  • ¥50 请教 麒麟系统挂载怎么安装
  • ¥15 如何在ns3中实现路径的自由切换
  • ¥20 SpringBoot+Vue3
  • ¥15 IT从业者的调查问卷
  • ¥65 LineageOs-21.0系统编译问题
  • ¥30 关于#c++#的问题,请各位专家解答!
  • ¥15 App的会员连续扣费
  • ¥15 不同数据类型的特征融合应该怎么做
  • ¥15 用proteus软件设计一个基于8086微处理器的简易温度计