下载样例自己测输出是对的,但是全wa,求佬指正,感谢必关注大佬

P1725 琪露诺

@[Exile_Code](/user/819682) 同问 ```cpp #include<iostream> #include<deque> using namespace std; long long a[200010],f[200010]; struct Node{long long num,id;}; int main() { int n,l,r; scanf("%d%d%d",&n,&l,&r); for (int i = 0;i <= n;i++) scanf("%lld",&a[i]); for (int i = 0;i < l;i++) f[i] = 0; deque<Node> maxn; for (int i = l;i <= n;i++) { if (!maxn.empty() && maxn.front().id < i - r) maxn.pop_front(); Node t; t.id = i; t.num = f[i - l]; while(!maxn.empty() && maxn.back().num < t.num) maxn.pop_back(); maxn.push_back(t); f[i] = max(f[i],maxn.front().num + a[i]); } long long ans = -1e18; for (int i = 1;i <= n;i++) ans = max(ans,f[i]); printf("%lld\n",ans); return 0; } ```
by codejiahui @ 2023-11-11 17:40:36


@[Exile_Code](/user/819682) 我是后面bug了,你是前面
by codejiahui @ 2023-11-11 17:41:45


@[codejiahui](/user/512407) 我找到错误了,第一个while应该是i-l&&f[q.back()]<f[i-l],我写的是i-r,写错了
by Exile_Code @ 2023-11-11 19:23:00


给你改了一下,打注释的地方是修改的,现在可以过了 ```cpp #include<iostream> #include<deque> using namespace std; long long a[200010],f[200010]; struct Node{long long num,id;}; int main() { int n,l,r; scanf("%d%d%d",&n,&l,&r); for (int i = 0;i <= n;i++) scanf("%lld",&a[i]); for (int i = 1;i < l;i++) f[i] = -9999999; // deque<Node> maxn; for (int i = l;i <= n;i++){ Node t; t.id = i-l; // t.num = f[i - l]; while(!maxn.empty() && maxn.back().num <= t.num) maxn.pop_back(); if (!maxn.empty() && maxn.front().id < i - r) maxn.pop_front(); maxn.push_back(t); f[i] = maxn.front().num + a[i]; // } long long ans = -1e8; for (int i = 1;i <= n;i++) if(i+r>n) // ans = max(ans,f[i]); printf("%lld\n",ans); return 0; } ``` @[codejiahui](/user/512407)
by Exile_Code @ 2023-11-11 19:37:45


|