厌氧代码求助

P1725 琪露诺

ChthollyNS @ 2024-07-12 23:09:19

#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。


by zhoujinhong @ 2024-07-12 23:41:11

@ChthollyNS 会不会是下标负数


by ChthollyNS @ 2024-07-12 23:49:09

@zhoujinhong 哦你说的对 我忘了我 queue 里面存的是下标不是值了(

thx


|