"站外题"求助95
  • 板块学术版
  • 楼主T20201126
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/1 18:53
  • 上次更新2023/10/23 19:45:08
查看原帖
"站外题"求助95
419474
T20201126楼主2023/4/1 18:53

https://www.luogu.com.cn/problem/U289938

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define re read()
inline int read(){
	int x=0,b=1;char c=getchar();
	while(!isdigit(c)){if(c=='-') b=-1;c=getchar();}
	while(isdigit(c)){x=x*10+c-'0';c=getchar();}
	return x*b;
}
const int N=200007;

int n,m,a[N],b[N],y=-1e18,p;
int zhan[N],head,tail,maxx;
signed main(){
	n=re;m=re;
	for(int i=1;i<=n;++i) {
		a[i]=re,b[i]=b[i-1]+a[i];
		if(a[i]>0) p=1;
		y=max(y,a[i]);
	}
	for(int i=0;i<=n;++i){
		while(head<=tail&&zhan[head]<i-m) ++head;
		while(head<=tail&&b[zhan[head]]>=b[i]) --tail;
		zhan[++tail]=i;
		maxx=max(maxx,b[i]-b[zhan[head]]);
	}
	if(p) cout<<maxx;
	else cout<<y;
	return 0;
}
2023/4/1 18:53
加载中...