数数(单调队列)

数数

![## 数数![在这里插入图片描述](https://img-blog.csdnimg.cn/20200811104155281.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNDM

解题思路

这题和假期(单调队列)差不多

AC代码

#include<iostream>
using namespace std;
long long a,n,k,s,head,tail,p[100005],sum[100005];
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		sum[i]=sum[i-1]+a;//前缀和
	}
	s=-2147483647;//初值
	head=tail=1;
	for(int i=1;i<=n;i++)
	{
		while(sum[p[tail]]>=sum[i]&&head<=tail)tail--;//弹出
		p[++tail]=i;//插入
		while(p[head]<i-k&&head<=tail)head++;
		s=max(s,sum[i]-sum[p[head]]);//求最大值
	}
	cout<<s;
}

谢谢

猜你喜欢

转载自blog.csdn.net/weixin_45524309/article/details/107930088
今日推荐