【P1714】切蛋糕(单调队列)

实在不明白难度等级,难不成前缀和是个很变态的东西?

说白了就是单调队列裸题,都没加什么别的东西,就是一个前缀和的计算,然而这个题也不是要用它优化,而是必须这么做啊。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define re register
#define wc 0.0000000001
using namespace std;
inline int read()
{
    int x=0,c=1;
    char ch=' ';
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    while(ch=='-')c*=-1,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*c;
}
int s[1000001],t,q[1000001],n,m,ans;
int main()
{
    n=read();
    m=read();
    for(re int i=1;i<=n;i++)
    {
        t=read();
        s[i]=s[i-1]+t;
    }
    int head=1,tail=0;
    for(re int i=1;i<=n;i++)
    {
        while(head<=tail&&s[q[tail]]>=s[i])
        tail--;
        q[++tail]=i;
        while(q[head]<i-m)
        head++;
        ans=max(ans,s[i]-s[q[head]]);
    }
    cout<<ans;
}
原文地址:https://www.cnblogs.com/victorique/p/8427006.html