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