tyvj/joyOI 1305-最大子序和【单调队列】
生活随笔
收集整理的這篇文章主要介紹了
tyvj/joyOI 1305-最大子序和【单调队列】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
題目鏈接:http://www.joyoi.cn/problem/tyvj-1305
題目大意
求一段長度不超過m的最大子序和。
解題思路
用前綴和,我們可以枚舉最右邊的點,然后取左邊合法范圍內(nèi)最小的前綴和,這個我們可以用單調(diào)隊列進行優(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++;//維護合法區(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--;//維護單調(diào)性q[++tail]=i;//加入隊列}printf("%d",ans); }總結(jié)
以上是生活随笔為你收集整理的tyvj/joyOI 1305-最大子序和【单调队列】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干净清爽的驱动管理软件干净清爽的驱动管理
- 下一篇: 多台主机之间免密码登录配置多台主机之间免