P1714 切蛋糕


传送门

思路

最大不定子段和(dp思想),前缀和+单调队列优化。

代码

#include
#include
#define MAXN 500007
using namespace std;
int n, m, arr[MAXN], q[MAXN], ans = INT32_MIN;
int main(void)
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
        arr[i] += arr[i - 1];
    }
    int head = 0, tail = 0;
    for (int i = 1; i <= n; i++)
    {
        while (head < tail && q[head] + m < i)
            head++;
        while (head < tail && arr[i] < arr[q[tail - 1]])
            tail--;
        q[tail++] = i;
        ans = max(ans, arr[q[tail - 1]] - arr[q[head]]);
    }
    cout << max(ans,arr[1]);
    return 0;
}