最大子序列和模板 用单调队列

最大子序列和模板 用单调队列

	#include<iostream>
	#include<algorithm>
	#include<stdio.h>
	using namespace std;
	const int N=300100;
	int sum[N];
	int ans=-N;
	int q[N];
	int main()
	{int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
	    cin>>sum[i];
	    sum[i]+=sum[i-1];
	}
	int l=1,r=1;
	for(int i=1;i<=n;i++)
	{
	    while(l<=r&&q[l]<i-m)l++;
	    ans=max(ans,sum[i]-sum[q[l]]);
	    while(l<=r&&sum[q[r]]>=sum[i])r--;
	    q[++r]=i;
	}
	    cout<<ans;
	}
posted @ 2020-02-05 12:19  arbor_one  阅读(124)  评论(0)    收藏  举报