记录编号 599550 评测结果 AAAAAAAAAA
题目名称 [東方S1] 琪露诺 最终得分 100
用户昵称 GravatarLikableP 是否通过 通过
代码语言 C++ 运行时间 0.203 s
提交时间 2025-03-21 21:21:40 内存使用 9.77 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. const int MAXN = 2e6 + 10;
  5.  
  6. int n, L, R;
  7. int a[MAXN];
  8. int f[MAXN], pre[MAXN];
  9. int q[MAXN], head = 1, tail = 0;
  10. int ed;
  11.  
  12. void print(int i) {
  13. if (pre[i]) print(pre[i]);
  14. printf("%d ", i);
  15. }
  16.  
  17. int main() {
  18. freopen("iceroad.in", "r", stdin);
  19. freopen("iceroad.out", "w", stdout);
  20. memset(f, 0x80, sizeof f), f[0] = 0;
  21. scanf("%d %d %d", &n, &L, &R);
  22. for (int i = 0; i <= n; ++i) {
  23. scanf("%d", &a[i]);
  24. }
  25. for (int i = L; i <= n; ++i) {
  26. while (head <= tail && q[head] < i - R) head++;
  27. while (head <= tail && f[q[tail]] < f[i - L]) tail--;
  28. q[++tail] = i - L;
  29. pre[i] = q[head];
  30. f[i] = f[q[head]] + a[i];
  31. if (i >= n - R + 1) {
  32. if (f[i] > f[ed]) {
  33. ed = i;
  34. }
  35. }
  36. }
  37.  
  38. printf("%d\n0 ", f[ed]);
  39. print(ed);
  40. printf("-1\n");
  41. return 0;
  42. }