厌氧代码求助
  • 板块P1725 琪露诺
  • 楼主Rosent
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/12 23:09
  • 上次更新2024/7/13 09:35:52
查看原帖
厌氧代码求助
651793
Rosent楼主2024/7/12 23:09
#include <bits/stdc++.h>
using namespace std;
#define maxn 2000100
#define int long long
int a[maxn],f[maxn];
deque <int> q;
signed main()
{
    int n,l,r;
    cin>>n>>l>>r;
    for(int i=0;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n+r;i++)
        f[i]=INT_MIN;
    q.clear();
    q.push_back(0);
    f[0]=0;
    for(int i=1;i<l;i++)
    {
        q.push_back(-1234567);//awa
        f[i]=-1234567;
    }
    for(int i=0;i<=n+r-l;i++)
    {
        while(!q.empty()&&f[q.back()]<f[i]) q.pop_back();//Segmentation Fault
        q.push_back(i);
        while(q.front()<i-r+l) q.pop_front();
        f[i+l]=max(f[i+l],f[q.front()]+a[i+l]);
        // cout<<f[i+l]<<" ";
    }
    int ans=INT_MIN;
    for(int i=n+1;i<=n+r;i++)
    {
        ans=max(ans,f[i]);
    }
    cout<<ans<<endl;
    return 0;
}

如果将 //awa 处的 -1234567 改为 INT_MIN 那么会爆 Segmention Fault,RE。

如果 //awa 处为 -1234567 就会厌氧 RE。

如果 //awa 处为 0 就不会 RE。

但是我不明白为什么 push_back 的内容不同会导致 RE。

2024/7/12 23:09
加载中...