tyvj/joyOI 1305-最大子序和【单调队列】
生活随笔
收集整理的這篇文章主要介紹了
tyvj/joyOI 1305-最大子序和【单调队列】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:http://www.joyoi.cn/problem/tyvj-1305
題目大意
求一段長(zhǎng)度不超過m的最大子序和。
解題思路
用前綴和,我們可以枚舉最右邊的點(diǎn),然后取左邊合法范圍內(nèi)最小的前綴和,這個(gè)我們可以用單調(diào)隊(duì)列進(jìn)行優(yōu)化。
code
#include<cstdio> #include<algorithm> using namespace std; int n,m,x,sum[300001],head,tail,q[300001],ans; int main() {scanf("%d%d",&n,&m);head=1;tail=0;for (int i=1;i<=n;i++){while (head<=tail&&q[head]+m<i) head++;//維護(hù)合法區(qū)域scanf("%d",&x);sum[i]=sum[i-1]+x;ans=max(ans,sum[i]-sum[q[head]]);//取最大值while (head<=tail&&sum[q[tail]]>sum[i]) tail--;//維護(hù)單調(diào)性q[++tail]=i;//加入隊(duì)列}printf("%d",ans); }總結(jié)
以上是生活随笔為你收集整理的tyvj/joyOI 1305-最大子序和【单调队列】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干净清爽的驱动管理软件干净清爽的驱动管理
- 下一篇: POJ2373-Dividing the