题解 P1714 【切蛋糕】
咦还是基本的前缀和加单调队列
但是前缀和可以不用数组来维护
在每一步读入的时候都处理就行
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
int n,m,x,h=1,t=1,sum,ans;
struct aaa{
int u,v;//v表示 u表示队列长度
}q[100010];
void read(int &x){
x=0;char c=getchar();int flag=1;
while(c<'0'||c>'9')
flag=(c=='-'?-1:1),c=getchar();
while(c>='0'&&c<='9')
x=x*10+c-'0',c=getchar();
x*=flag;
}
int main(){
read(n);read(m);read(sum);
q[t].u=1;q[t].v=sum;
for(int i=2;i<=n;i++){
read(x);
sum+=x;
while(h<=t&&q[t].v>=sum) t--;
q[++t].u=i;q[t].v=sum;//u 入队操作 v当前队尾值
while(h<=t&&q[t].u-q[h].u>m) h++;//出队操作
ans=max(ans,q[t].v-q[h].v);//t.v-h.v表示当前队列的值
}
cout<<ans<<endl;
}