tyvj 1305 最大m子段和 单调队列 求连续l(1<=l<=k)个数的和的最大值 数列不可循环
2010-10-25 21:12
369 查看
| |||
|
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=301000;
int a
,sum
;
int Q
,I
;//最小单调队列
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum[i]=sum[i-1]+a[i];}
int head=0,tail=-1;
int _max=(1<<31);
for(int j=1;j<=n;j++)//sum[j]-sum[i-1]的最大值
{
int i=j-1;//sum[j-1]入队
while(head<=tail&&Q[tail]>=sum[i]) tail--;
tail++;
Q[tail]=sum[i],I[tail]=i;
i=j-m-1;//sum[i]出队
while(head<=tail&&I[head]<=i) head++;
int _res=sum[j]-Q[head];
if(_res>_max) _max=_res;
}
printf("%d/n",_max);
}
return 0;
}
相关文章推荐
- hdu 3415 Max Sum of Max-K-sub-sequence 单调队列 求连续l(1<=l<=k)个数的和的最大值 数列可循环
- tyvj 1305 —— 长度不超过m的最大连续和 【前缀和+单调队列】
- tyvj1305 最大子序和 【单调队列优化dp】
- tyvj1305 最大子序和 【单调队列优化dp】
- 【动态规划】【单调队列】tyvj1305 最大子序和
- hdu 3530 Subsequence 单调队列 求最长连续区间,满足条件(m<=max-min<=k)
- TYVJ1305 最大子序和 - 单调队列
- Tyvj1305最大子序和(单调队列优化dp)
- [单调队列] 51Nod 1275 连续子段的差异
- sicily 1888循环队列的最大子段和
- 51nod 1275 连续子段的差异(twopointer+单调队列)
- 51 nod 1275 连续子段的差异(单调队列)
- 【单调队列】51nod 1275 连续子段的差异
- HDU 3530 Subsequence(区间最值差>=m且<=k的最大长度、双单调队列)
- SPOJ 962 - Intergalactic Map 1<-2->3 构图最大流
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列+最大连续子串和)
- 动态规划入门 TYVJ 1305 最大子段和(环状)
- 不可变队列ImmuableQueue<E>
- 51nod-1275 连续子段的差异(单调队列)
- 循环结构<1>__笔记(5)