View Code
#include<stdio.h> const int MAXN = 100000 + 10; class Node { int s; //值。 int i; //下标。 public: Node() {} Node(int i, int s) : i(i), s(s) {} ~Node() {} int visi() {return this->i;} int viss() {return this->s;} }que[MAXN]; int s[MAXN]; int main() { int n, m; while(scanf("%d %d", &n, &m) != EOF) { s[0] = 0; for(int i = 1; i <= n; i++) { scanf("%d", &s[i]); s[i] += s[i-1]; } int ans = s[1]; Node *fr = new Node; //队列头指针。 Node *ta = new Node; //队列尾指针。 fr = ta = que; que[0] = Node(0, 0); for(int i = 2; i <= n; i++) { while(fr<=ta && (*fr).visi() < i-m) fr++; while(fr<=ta && (*ta).viss() >= s[i-1]) ta--; ta++; *ta = Node(i-1, s[i-1]); int t = s[i] - (*fr).viss(); if(ans < t) ans = t; } printf("%d\n",ans); } return 0; }